【ベストアンサーに 1000pt ~】【文字列比較プログラム】


文字列 A と文字列 B に含まれる数字を比較したいと考えています。
両者に含まれる数字がすべて同じであれば真、1 つでも異なる場合は偽としたいです。

文字列 A:私は 30 才です。
文字列 B:I am 30 years old.
結果は真となります。

文字列 A:5 人の男が 6 つのリンゴを買いました。
文字列 B:5 men bought 4 apples.
結果は偽となります。

特に指定はありませんが、Word/Excel VBA あたりでお願いします。
実現できるツールがすでにあればそれを教えてください。
Terapad を使っています。秀丸は使っていません。

採用回答には 1000pt ~

詳細はコメントをご覧ください。

回答の条件
  • 1人2回まで
  • 登録:2008/06/24 22:24:53
  • 終了:2008/06/25 00:57:23

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912008/06/24 23:53:46

ポイント1250pt

面白そうなので、VBA で作成してみました。

順不問とのことですので初期設定をそのようにしていますが、順序一致を確認するときは

sortMode を False にするとそのようになります。


Option Explicit

'--- ソートモード
' 数字の順番が異なってもよいときは True
' 数字の順番が一致しなければいけないときは False
' に設定
Const sortMode = True

'------------------------------------------------
' A 列とB列を比較し、結果を C列 に入れます。
'------------------------------------------------
Sub numComps()
'------------------------------------------------
    Dim sortMode As Boolean
    Dim lastRow As Long
    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    
    Dim i As Long
    Dim src As String, dst As String
    For i = 1 To lastRow
        src = Cells(i, "A").Value
        dst = Cells(i, "B").Value
        
        If numsCheck(src, dst) Then
            Cells(i, "C").Value = "OK"
            Cells(i, "C").Interior.ColorIndex = 0   ' セルに色を白に
        Else
            Cells(i, "C").Value = "NG"
            Cells(i, "C").Interior.ColorIndex = 3   ' セルに色を赤に
        End If
    Next
End Sub

'------------------------------------------------
' 文字列を比較し、True or False を返す。
'------------------------------------------------
Function numsCheck(src As String, dst As String) As Boolean
    Dim srcAry As Variant
    Dim dstAry As Variant
    
    srcAry = getNumArray(src)
    dstAry = getNumArray(dst)
    MsgBox Join(srcAry, "::")
    MsgBox Join(dstAry, "::")
    numsCheck = False
    
    If UBound(srcAry) <> UBound(dstAry) Then
        Exit Function
    End If
    
    Dim i As Long
    For i = 0 To UBound(srcAry)
        If srcAry(i) <> dstAry(i) Then
            Exit Function
        End If
    Next
    numsCheck = True
End Function

'------------------------------------------------
' 文字列から数値を取得し配列で返す。
' sortMode が True のときは、数値配列を昇順にする
'------------------------------------------------
Function getNumArray(sentence) As Variant
    Dim regEx As Object
    Set regEx = CreateObject("VBScript.RegExp")
    Dim Match, Matches

    regEx.Pattern = "[\d,.]+"
    regEx.IgnoreCase = True
    regEx.Global = True
    
'--- 文字列から数値を取得
    Set Matches = regEx.Execute(sentence)
    Dim ret As String, numStr As String
    For Each Match In Matches   ' Matches コレクションに対して繰り返し処理を行います。
        If IsNumeric(Match.Value) Then
'--- 語末の「.」と「,」は無視
            If Right(Match.Value, 1) = "." Or Right(Match.Value, 1) = "," Then
                numStr = Left(Match.Value, Len(Match.Value - 1))
            Else
                numStr = Match.Value
            End If
            
            If ret = "" Then
                ret = ret & numStr
            Else
                ret = ret & "/" & numStr
            End If
        End If
    Next

    Dim ar As Variant
    ar = Split(ret, "/")
    If UBound(ar) = 0 Then
        getNumArray = ar
    End If
    
'--- ソート
    Dim i As Long, j As Long
    Dim tmp As String
    If sortMode = True Then
        For i = 0 To UBound(ar)
            For j = i + 1 To UBound(ar)
                If CDbl(ar(i)) > CDbl(ar(j)) Then
                    tmp = ar(i)
                    ar(i) = ar(j)
                    ar(j) = tmp
                End If
            Next
        Next
    End If
    
    getNumArray = ar
End Function

一応の動作確認はしましたが、なにかありましたらコメントください。

その他の回答(4件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/06/24 23:44:30

ポイント500pt

ExcelVBA のプログラム例を示します。

2つ以上の数字が含まれる場合、数字の順序が異なる場合は「偽」と判定します。


セル A1, A2 に比較する文字列を代入してからマクロ実行してください。

セル A3 に結果(一致/出現頻度が異なる/数値が異なる)が代入されます。


Sub JECompare()
    Dim re As Object
    Dim mt1 As Object, mt2 As Object
    Dim i As Integer
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "[0-9\,\.]+"  '検索する正規表現パターン(半角数字、カンマ、小数点有り)
    re.Global = True           '検索範囲はグローバル
    re.IgnoreCase = True       '大文字・小文字を区別する

    Set mt1 = re.Execute(Range("A1"))
    Set mt2 = re.Execute(Range("A2"))

    '----出現頻度を比較する
    If (mt1.Count <> mt2.Count) Then
       Range("A3") = "出現頻度が異なる"
    Else
    '----1つずつ数値を比較する
        flag = True
        For i = 0 To (mt1.Count - 1)
            If (mt1.Item(i).Value <> mt2.Item(i).Value) Then
                flag = False
         End If
        Next i
        If (flag <> True) Then
            Range("A3") = "数値が異なる"
        Else
            Range("A3") = "一致"
        End If
    End If

End Sub
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912008/06/24 23:53:46ここでベストアンサー

ポイント1250pt

面白そうなので、VBA で作成してみました。

順不問とのことですので初期設定をそのようにしていますが、順序一致を確認するときは

sortMode を False にするとそのようになります。


Option Explicit

'--- ソートモード
' 数字の順番が異なってもよいときは True
' 数字の順番が一致しなければいけないときは False
' に設定
Const sortMode = True

'------------------------------------------------
' A 列とB列を比較し、結果を C列 に入れます。
'------------------------------------------------
Sub numComps()
'------------------------------------------------
    Dim sortMode As Boolean
    Dim lastRow As Long
    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    
    Dim i As Long
    Dim src As String, dst As String
    For i = 1 To lastRow
        src = Cells(i, "A").Value
        dst = Cells(i, "B").Value
        
        If numsCheck(src, dst) Then
            Cells(i, "C").Value = "OK"
            Cells(i, "C").Interior.ColorIndex = 0   ' セルに色を白に
        Else
            Cells(i, "C").Value = "NG"
            Cells(i, "C").Interior.ColorIndex = 3   ' セルに色を赤に
        End If
    Next
End Sub

'------------------------------------------------
' 文字列を比較し、True or False を返す。
'------------------------------------------------
Function numsCheck(src As String, dst As String) As Boolean
    Dim srcAry As Variant
    Dim dstAry As Variant
    
    srcAry = getNumArray(src)
    dstAry = getNumArray(dst)
    MsgBox Join(srcAry, "::")
    MsgBox Join(dstAry, "::")
    numsCheck = False
    
    If UBound(srcAry) <> UBound(dstAry) Then
        Exit Function
    End If
    
    Dim i As Long
    For i = 0 To UBound(srcAry)
        If srcAry(i) <> dstAry(i) Then
            Exit Function
        End If
    Next
    numsCheck = True
End Function

'------------------------------------------------
' 文字列から数値を取得し配列で返す。
' sortMode が True のときは、数値配列を昇順にする
'------------------------------------------------
Function getNumArray(sentence) As Variant
    Dim regEx As Object
    Set regEx = CreateObject("VBScript.RegExp")
    Dim Match, Matches

    regEx.Pattern = "[\d,.]+"
    regEx.IgnoreCase = True
    regEx.Global = True
    
'--- 文字列から数値を取得
    Set Matches = regEx.Execute(sentence)
    Dim ret As String, numStr As String
    For Each Match In Matches   ' Matches コレクションに対して繰り返し処理を行います。
        If IsNumeric(Match.Value) Then
'--- 語末の「.」と「,」は無視
            If Right(Match.Value, 1) = "." Or Right(Match.Value, 1) = "," Then
                numStr = Left(Match.Value, Len(Match.Value - 1))
            Else
                numStr = Match.Value
            End If
            
            If ret = "" Then
                ret = ret & numStr
            Else
                ret = ret & "/" & numStr
            End If
        End If
    Next

    Dim ar As Variant
    ar = Split(ret, "/")
    If UBound(ar) = 0 Then
        getNumArray = ar
    End If
    
'--- ソート
    Dim i As Long, j As Long
    Dim tmp As String
    If sortMode = True Then
        For i = 0 To UBound(ar)
            For j = i + 1 To UBound(ar)
                If CDbl(ar(i)) > CDbl(ar(j)) Then
                    tmp = ar(i)
                    ar(i) = ar(j)
                    ar(j) = tmp
                End If
            Next
        Next
    End If
    
    getNumArray = ar
End Function

一応の動作確認はしましたが、なにかありましたらコメントください。

id:SALINGER No.3

SALINGER回答回数3454ベストアンサー獲得回数9692008/06/24 23:36:14

ポイント750pt

ExcelVBAの正規表現で、A列とB列に文字。C列に真偽を表示します。

Option Explicit

Sub Macro()
    Dim RE
    Dim strPattern As String
    Dim reMatch1
    Dim reMatch2
    Dim str1 As String
    Dim str2 As String
    Dim i As Long
    Dim j As Long
    Dim f As Boolean
    Dim h()
    Dim r As Long
    
    Set RE = CreateObject("VBScript.RegExp")
    
    r = 1
    While Cells(r, 1).Value <> ""
        str1 = Cells(r, 1).Value
        str2 = Cells(r, 2).Value
        
        '2つの文字列の数字を正規表現で抽出
        strPattern = "[0-9]+"
        With RE
            .Pattern = strPattern
            .IgnoreCase = True
            .Global = True
            Set reMatch1 = .Execute(str1)
            Set reMatch2 = .Execute(str2)
        End With
        
        '2つ目の文字を別の配列に挿入
        ReDim h(reMatch2.Count)
        For i = 0 To reMatch2.Count - 1
            h(i) = reMatch2(i).Value
        Next i
        
        Cells(r, 3).Value = "真"
        
        '2つの配列を比較
        For i = 0 To reMatch1.Count - 1
            f = False
            For j = 0 To reMatch2.Count - 1
                If reMatch1(i).Value = h(j) Then
                    h(j) = ""
                    f = True
                    Exit For
                End If
            Next j
            If f = False Then
                Cells(r, 3).Value = "偽"
                Exit For
            End If
        Next i
        
        r = r + 1
    Wend
    
    Set RE = Nothing
End Sub
id:taknt No.4

きゃづみぃ回答回数13539ベストアンサー獲得回数11982008/06/24 23:25:51

ポイント100pt

ExcelのVBAで標準モジュールに

Function ChkNum(a As String, b As String) As Boolean
    ChkNum = True
    For c = 0 To 9
        If InStr(a, c) > 0 Then d = 1 Else d = 0
        If InStr(b, c) > 0 Then d = d + 10
        If d <> 11 And d <> 0 Then
            ChkNum = False
            Exit For
        End If
    Next c
End Function

と入れてください。

あとは セル上で

=chknum(A1,B1)

とすれば FALSEかTRUEが表示されます。

id:Mook No.5

Mook回答回数1312ベストアンサー獲得回数3912008/06/24 23:29:06

ポイント10pt

面白そうな題材でしたので、VBA で作成してみました。

結果は、C列に OK, NG で表示するようにしています。


お手数ですが、VBE の 「ツール」⇒「参照設定」で

「Microsoft VBScript Regular Expressions」にチェックを入れて、実行ください。


注1)語順は不問にしていますが、語順一致にしたい場合は sortMode を False に変更ください。

数値の全角半角は識別していませんので、識別する場合は wideMode を False にしてください。


注2)ただし全角半角を識別しない場合、全角文字は数値と見なさないのでご注意ください。

(全角を排除したい場合には有効なチェックにかもしれませんが、それ以外は使い道ないかも・・・。)


Option Explicit

'--- ソートモード
' 数字の順番が異なってもよいときは True
' 数字の順番が一致しなければいけないときは False
' に設定
Const sortMode = True

'--- 全角モード
' 数字が全角でもよいときは True
' 数字が半角でなければまずいときは False
' に設定
Const wideMode = True

'------------------------------------------------
' A 列とB列を比較し、結果を C列 に入れます。
'------------------------------------------------
Sub numComps()
'------------------------------------------------
    Dim sortMode As Boolean
    Dim lastRow As Long
    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    
    Dim i As Long
    Dim src As String, dst As String
    For i = 1 To lastRow
        If wideMode = True Then
            src = StrConv(Cells(i, "A").Value, vbNarrow)
            dst = StrConv(Cells(i, "B").Value, vbNarrow)
        Else
            src = Cells(i, "A").Value
            dst = Cells(i, "B").Value
        End If
        
        If numsCheck(src, dst) Then
            Cells(i, "C").Value = "OK"
            Cells(i, "C").Interior.ColorIndex = 0   ' セルに色を白に
        Else
            Cells(i, "C").Value = "NG"
            Cells(i, "C").Interior.ColorIndex = 3   ' セルに色を赤に
        End If
    Next
End Sub

'------------------------------------------------
' 文字列を比較し、True or False を返す。
'------------------------------------------------
Function numsCheck(src As String, dst As String) As Boolean
    Dim srcAry As Variant
    Dim dstAry As Variant
    
    srcAry = getNumArray(src)
    dstAry = getNumArray(dst)
    
    numsCheck = False
    
    If UBound(srcAry) <> UBound(dstAry) Then
        Exit Function
    End If
    
    Dim i As Long
    For i = 0 To UBound(srcAry)
        If srcAry(i) <> dstAry(i) Then
            Exit Function
        End If
    Next
    numsCheck = True
End Function

'------------------------------------------------
' 文字列から数値を取得し配列で返す。
' sortMode が True のときは、数値配列を昇順にする
'------------------------------------------------
Function getNumArray(sentence) As Variant
    Dim Match, Matches
    Dim regEx As New RegExp
    
    regEx.Pattern = "\d+"
    regEx.IgnoreCase = True
    regEx.Global = True
    
'--- 文字列から数値を取得
    Set Matches = regEx.Execute(sentence)
    Dim ret As String
    For Each Match In Matches   ' Matches コレクションに対して繰り返し処理を行います。
        If ret = "" Then
            ret = ret & Match.Value
        Else
            ret = ret & "," & Match.Value
        End If
    Next

    Dim ar As Variant
    ar = Split(ret, ",")
    If UBound(ar) = 0 Then
        getNumArray = ar
    End If
    
'--- ソート
    Dim i As Long, j As Long
    Dim tmp As String
    If sortMode = True Then
        For i = 0 To UBound(ar)
            For j = i + 1 To UBound(ar)
                If CLng(ar(i)) > CLng(ar(j)) Then
                    tmp = ar(i)
                    ar(i) = ar(j)
                    ar(j) = tmp
                End If
            Next
        Next
    End If
    
    getNumArray = ar
End Function

簡単な動作チェックはしていますが、問題ありましたらコメントください。

  • id:Nigitama
    プログラムの用途:
    大量の和文と英文がペアで用意されています。
    これらの文章には数字が入っているのもしばしば。
    時々、両方の文章で数字がずれている場合があります。
    この数字のずれを簡単に見つけたいというのが目的です。

    プログラムの精度:
    数字がずれている可能性があれば漏らさず「偽」にしたいです。
    最終的には自分の目で確認するので、漏れのないようにチェックしたいのです。
    つまり、冤罪上等、抜けはNGです。

    文字列の形式:
    なんとでもなります。
    改行を挟んでテキストエディタに貼った状態でもいいですし、
    エクセルファイルで、A1に和文B1に英文、A2に和文B2に英文・・・以下略。という形式でもできます。
    提示してくれたプログラムに合わせて整形します。

    問題点:
    質問文の 2 つめの例のように、1 文に含まれる数字は 1 つとは限りません。
    また、英語と日本語は語順が違うので、数字も常に同じ順番とは限りません。

    # ただし、語順が変わることに対応できなければ、そういうケースを全部「偽」で扱ってもらっても結構です (数字が 2 つ以上含まれていて、さらに順番が違うというのは結構レアなので、すべて目視確認しても大丈夫かもしれません)。

    質問がある方はコメント欄でお願いします。
    明日のお昼くらいには欲しいと思っています。
  • id:pahoo
    1)日本語の数字は、すべてアラビア数字(半角のみ)ですか? 漢数字や全角文字は含まれていませんね。たとえば「2万320」のような表記は含まれていないという前提でよいですか?
    2)桁区切りのカンマは含まれていますか?
    3)整数のみの比較で十分ですか?
    4)符号(プラス/マイナス)付数字はありますか?
    5)指数表記(例:2.3E+04)は無いですよね?
    6)単位の変換(例:円とドル)は出来なくても良いですよね?

    いずれにしても、和文と英文の語順まで考慮した比較というのは難しいのではないかと思います。
  • id:Nigitama
    どちらの文字列も、含まれている可能性のある数字はすべて半角です。
    全角の数字は存在しません。
  • id:kotae
    http://officetanaka.net/excel/vba/tips/tips56.htm
    こういうのを参考にするとできそう…
  • id:Nigitama
    質問ありがとうございます (上のコメントと行き違いになりましたね)。
    以下にお答えします。

    1) 数字はアラビア数字 (半角のみ) です。
    2) カンマは・・・含まれているものもあります。ただし、英語にカンマがあれば日本語にもカンマがあります。なければアウトです。
    3) うーん、小数点もあります。
    4) プラスマイナス記号はありますが、無視してください。数字とは別で考えてもらって大丈夫です。
    5) 指数表記はありません。
    6) 単位の変換なども不要です。

    質問ありがとうございました。

    (5 分以内の発言ができないのはキツイですね)
  • id:taknt
    すみません、回答してからですが・・・。

    数字の順番は 一緒じゃないとダメなんですか?

    たとえば
    文字列 A:私は 30 才です。
    文字列 B:I am 03 years old.

    は NG?

    あと カンマを考慮というのは
    文字列 A:私は,30 才です。
    文字列 B:I am 30 years old.
    でもNGということでしょうか?
  • id:lowbar
    質問です
    >文字列 A:5 人の男が 6 つのリンゴを買いました。
    >文字列 B:5 men bought 4 apples.
    >結果は偽となります。
    とありますが・・・


    文字列 B:6つのりんごを買ったのは男5人です。
    の場合は真でしょうか?偽でしょうか?
  • id:Nigitama
    taknt さん

    > たとえば
    > 文字列 A:私は 30 才です。
    > 文字列 B:I am 03 years old.

    これは NG ですね。
    「数字の順番」っていうのは、30 才と 03 才ではなくて、以下のような違いを言います。

    50 人の男が 65 個のリンゴを買いました。
    65 個のりんごを買ったのは男 50 人です。
    (上記の場合、意味は (ほとんど) 同じで、数字の出現順が違います)
  • id:Mook
    回答の後にコメントを読みました。

    対応版をアップしますので、最初の回答はオープンしないでください。
  • id:Nigitama
    lowbar さん

    > 文字列 B:6つのりんごを買ったのは男5人です。
    > の場合は真でしょうか?偽でしょうか?

    「真」にするのが最善です。

    ただ、条件にも書いてあるとおり、「冤罪上等、モレはNG」というのが原則ですから、語順が違う場合をすべて「偽」にしてもらっても構いません。数字が 2 つ以上でさらに語順が違うというケースはあまりないので、そうした場合はすべて目視確認するのも許容範囲です。もちろんこれは次善の実装ですが。

    Mook さん

    > 回答の後にコメントを読みました。
    > 対応版をアップしますので、最初の回答はオープンしないでください。

    承知しました。
    回答上限を 2 回に挙げます。

    (くどいですけど、5分以内に発言が出来ないのはキビシイ)
  • id:SALINGER
    私の回答も小数点とカンマには未対応でした。
  • id:Nigitama
    taknt さん

    すいません質問を見落としていました。

    > 文字列 A:私は,30 才です。
    > 文字列 B:I am 30 years old.

    えーっと、想定していませんでしたが、
    この場合のカンマは無視してもらって大丈夫です。
    実際問題こういうのはナイトおもいますので、

    あー、ていうことは、カンマで数字を分断して
    15,000 という数字を「15」と「000」ずつ比べてもいいってことでしょうかね。

    あー、気にしないでください。余計なこと言いました。
  • id:kn1967
    沢山回答が入ってますので、投稿は控えようと思いますが
    ExcelVBAにてとりあえず造った(一部未実装)ので、たたき台にでも使ってください。

    Sub Macro1()
      'ツール→参照設定にてMicrosoft VBScript Regular Expressions 5.5 を選択しておく事
      Dim RE As VBScript_RegExp_55.RegExp
      Dim j1 As Variant, j2 As Variant: '和文用
      Dim e1 As Variant, e2 As Variant: '英文用
      Dim rm As Long, r As Long: ' 行数と現在位置
      Dim c As Long: 'ループ用
      rm = ActiveSheet.Range("$A$1").End(xlDown).Row: '最終行の取得
      Set RE = New VBScript_RegExp_55.RegExp
      With RE
        .Global = True: '繰り返し検索を行う
        .IgnoreCase = True: '大文字小文字を区別する(今回は無くても良い)
        .Pattern = "\d+": '検索パターンは数字が1以上続く文字列
        For r = 2 To rm: '2行目から開始するものとする
          Set j1 = .Execute(Range("A" & r).Value): '実行
          Set e1 = .Execute(Range("B" & r).Value): '実行
          If j1.Count <> e1.Count Then
            Range("C" & r).Value = "個数が違う"
          Else
            For c = 0 To j1.Count - 1: 'そのままの並びで比較
              If j1.Item(c) <> e1.Item(c) Then Exit For
            Next c
            If c = j1.Count Then
              Range("C" & r).Value = "◎"
            Else
              Range("C" & r).Value = "中身に違いあり"
            End If
          End If
        Next r
      End With
    End Sub

    数値が違う場合や、並び順が異なる場合に”中身に違いあり”になります。
    この部分をもう少し改良すると・・・。
  • id:Nigitama
    ただいま回答受付を一時停止しました
    pahoo さんのやつを試しています。
    ほかにも完成した人もいると思うので、ちょっと待っててください。せっかく作って頂いたやつなので、オープン後に回答をお願いします。
  • id:taknt
    pahooさんのって . が 含まれてると カウントされちゃうみたいです。
  • id:Nigitama
    回答受付を再開しました。
  • id:Mook
    Pahoo さんのを見て、「あっ」
    正規表現のエスケープ忘れてた・・・。

    動作確認時にはこれでも動いていたのですが、一応下記に変更ください。
    誤:regEx.Pattern = "[\d,.]+"
    正:regEx.Pattern = "[\d,\.]+"

    懸念されるケースは数値の直後に文字があった場合ですが、どうして動いたのかなぁ。
    どちらも数値として認識していました(MicoSoft仕様だから?)。

    それから、もう一つ「あっ」
    デバッグ用の MsgBox 削除してください(^^;;;;
  • id:SALINGER
    私の回答は
    strPattern = "(\d*(\.\d+)?|\d{1,3}(,\d{3})*(\.\d+)?)"
    これでカンマと小数点対応かな。
    (スラッシュは¥で)
  • id:pahoo
    takntさん、ご指摘ありがとうございます。
    あの正規表現では、カンマやピリオドが1文字でもカウントされてしまいますね。
    あと、1,234 と 1234 を別の数値として認識してしまいます。
    数字列を切り出して、整数演算した方が良さそうです――。

    申し訳ありませんが時間がないので、他の方にバトンタッチお願いします。
  • id:Nigitama
    Mook さんのソースで MsgBox をコメントアウトせずに大量の文字列比較をした私が通りますよ。

    回答を一時ストップします。
  • id:Mook
    多くのポイントありがとうございます。

    滅多に通るケースではありませんが、バグがありました。
    誤:numStr = Left(Match.Value, Len(Match.Value - 1))
    正:numStr = Left(Match.Value, Len(Match.Value) - 1)
    でした。修正ください。
  • id:Nigitama
    みなさん本当にありがとうございました。
    人力としては高いポイントですが、このタイミングで完全に私専用に作られたこのプログラムでどれだけ楽が出来るのかを考えたり、ミスの少ない仕事に近づけて、結果として信用を得ることを考えれば決して高いポイントではありません。

    さて、
    数字にピリオドまたはカンマが隣接する場合は別の数字と見なされるようです。
    つまり「10.」と「10」は別と見なされています。
    たとえば英文の末尾に数字が来ると、自然とピリオドと隣になりますし、カンマで並べられた数字などもそうですね。
    これを無視するような変更を教えていただけるとなお嬉しいです。
    こちらに関してはいつでも結構ですが。
    ていうか後出しじゃんけんの感ありですが。。。

    というかもうこんな時間、みなさん寝ましょう。
    おやすみなさい。
  • id:Mook
    先のバグの修正が、ご指摘のコメントの対応になると思います。
    あぁ、また今日も夜更かししてしまった。

    おやすみなさい。
  • id:Nigitama
    kn1967 さん
    コメントありがとうございます。
    私もたまに VBA をいじくるので大変参考になります。
  • id:hissssa
    両方の文字列に含まれる数値以外の文字列をすべてセパレータに置換してから単純に文字列比較すればいいのでは?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません