月刊プログラム!
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文なんかも「比較」と言えますね。