月刊プログラム!
Visual Basic For Excel

Vol_17
2001.Oct.08

Presented by kouta_y
感想等は掲示板、苦情はメールへ。

にこちゃん
最近ソフト作ってないな・・・とか思ってるけど、
もしかしてバージョンアップに忙しいのかもしれない。
今回も文章ばかりで見辛いですが、耐えてください。。。


今回は「文字列比較」について。
よくIF文などで使う比較には「=」とか「<>」とか「>=」とかを使います。
今更ですが、比較演算子を使った比較にも、当然「戻り値」があります。
戻り値の型はboolean型です。

今回の本題。
文字列比較には「=」とか「<>」とかしかないのか?
いやいや他にもいろいろあります。

なかなか便利なのが「Like」演算子です。
例えば、

"ABC" Like "?B?"

こんな比較が出来ます。
結果は「True」です。
「?」は任意の1文字にだけ使えるワイルドカードです。

他にも以下のような比較が出来ます。

"ABC" Like "*B*"  'True
"ABC" Like "*"    'True
"ABC" Like "???"  'True
"ABC" Like "A*"   'True
"ABC" Like "*A"   'False

ワイルドカードが使えるのは、右辺だけです。
あとあまり使わないですが、

"A" Like "[A-Z]"       'True
"AB" Like "[A-Z][A-Z]" 'True
"C" Like "[D-Z]"       'False
"AB" Like "[A-Z]"      'False
"A" Like "[!A-Z]"      'False

こんな感じにも出来ます。
[A-Z]というのは、AからZまでの全ての文字という意味です。
!は「否定」という意味です。

あともう1コ。
「StrComp」関数というのもあります。
使い方は簡単。

StrComp("A", "a", vbBinaryCompare) '-1
StrComp("A", "a", vbTextCompare)   '0
StrComp("a", "A", vbBinaryCompare) '1

3番目の引数は、「比較モード」です。
戻り値は、
1番目の引数が2番目の引数未満。−1。
1番目の引数と2番目の引数が等価。0。
1番目の引数が2番目の引数以上。1。
となります。

さてさてここで、「比較モード」とはなんの事やらって感じです。
たぶん「Like」のヘルプを見ても「比較モード」がなんたらかんたら、出てきたと思います。

比較モードには、テキスト、バイナリ、データベースの3つが選択出来ます。
データベースはAccessのみなので、ここではとりあえず省きます。(作者が知らないから)

まず、バイナリモードでの比較というのは、以前にも何度か出てきた「文字コード」での比較を行います。
例えば、「A」の文字コードは「65」になります。
「a」の文字コードは「97」です。
この2つをバイナリで比較すると・・・。

StrComp("A", "a", vbBinaryCompar)

65 Like 97
(65 = 97)
と同じ
結果になる

もちろん結果は、Falseになります。
StrCompの方は「A」の方が小さいので、「-1」が返ります。
文字コードさえ覚えれば簡単です。

では、テキストモードでの比較です。
これは文字コード関係なしに、読み方が同じならば、「等価」と見なされます。
例です。

StrComp("a", "A", vbTextCompare)
StrComp("A", "a", vbTextCompare)
StrComp("a", "A", vbTextCompare)

結果は全て「0」になります。
よく見えないでしょうが、2行目の「a」は全角文字です。1行目は両方全角です。

こんな感じです。
あとテキストモードだと、「あ」と「ア」も等価と見なされます。


以上のように、いろいろな方法で文字列比較はできます。
あと「=」とか「Like」とかでも「テキスト比較させたい!」という人は、モジュールの一番上に「Option Compare Text」と打ってください。
そうすると、そのモジュール全体のデフォルト比較モードはテキストモードとなります。
何も打たないか、「〜 Binary」とすると、バイナリ比較となります。



えー、今回はこれで終わりです。
そういえば、Select Case文なんかも「比較」と言えますね。