以下の内容はhttps://rokujo.hatenadiary.com/entry/2015/06/11/143313より取得しました。


VBA:それは全角と半角、大文字小文字を区別しないアバウトな言語

仕事でAccessVBAを使っていて1点ハマったことがあった。CSVファイルのカンマ区切りの指定したカラムの文字列を取り出す、という私ではない誰かが作った関数に欠陥があるので、その調査をしていた。

'※記述は変えてあります
Public Function mid_between_comma(strin As String, strout As String, J As Integer) As Integer
Dim i As Integer, AAA As Integer, cnt As Integer
Dim cnt_X(2) As Integer, cnt_A(2) As Integer
Dim strtemp As String
cnt = 0
    For i = 1 To Len(strin)
        strtemp = Mid(strin, i, 1)
            If strtemp = "," Then
                cnt = cnt + 1
                    If cnt = J Then
                        cnt_X(1) = cnt
                        cnt_A(1) = i
                    End If
                    
                    If cnt = J + 1 Then
                        cnt_X(2) = cnt
                        cnt_A(2) = i
                    End If
            End If
    Next
'以下略

これだけ見ると動作しそうだ。しかし、次のような行を読ませるとまともに動作しない(内容は変えてあります)。

5,55,5555,55,5555,5555,5555555555,5555,555555,"ジョセフ・ジョースター,きさま!,見ているなッ!",55,555,5,5555,5,5,5555,5,5,5,5,5,5,5,"5,55,55,5555

『,"ジョセフ・ジョースター,きさま!,見ているなッ!"』このカラムを丸ごと取り出したいのに、全角カンマが何故かセパレーターと認識され、例えば『"ジョセフ・ジョースター』だけが取り出されてしまう。理由がわからないので上記のコードをデバッグしていた。すると

If strtemp = "," Then

なんとここ、strtempに全角カンマが入っていても、Trueとなった!!あほか!!!!
カンマだけなのか?とデバッガ上で次のように試してみた。

"S" = "S" 'True
"0" = "0" 'True
"a" = "A" 'True
"0B1" = "0b1" 'True

おいマジかよ!アンビリーバボー!ありがた迷惑!
というわけで、VBAを扱う方は注意!彼のイコール演算子は、全角半角、大文字小文字を区別してくれない。丹精込めて作成したコードが思わぬ誤動作をしているならば、このクソみたいな仕様が原因かもしれない。。なお、VB.NETでは、上記の比較は全てFalseになる。それがまともな判断だと思う。
それでもExcelAccessで前時代的なVBAを使わなければいけない貴方は次のメソッドを使いましょう。

StrComp(",", ",", vbBinaryCompare) 'False



以上の内容はhttps://rokujo.hatenadiary.com/entry/2015/06/11/143313より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14