文字列の順序を比較する際に使用する、StrComp関数について解説します。
基本構文
比較結果 = StrComp(文字列1, 文字列2, 比較種類)
| 比較結果 | 文字列の判定 |
|---|---|
| -1 | 文字列1<文字列2 |
| 0 | 文字列1=文字列2 |
| 1 | 文字列1>文字列2 |
| Null | いずれかの文字列がNull |
| 比較種類 | 値 | 判定内容 |
|---|---|---|
| vbUseCompareOption | -1 | Option Compare に従う 省略時はこれだがなぜか明示するとエラー |
| vbBinaryCompare | 0 | バイナリ比較(大/小文字、全/半角を区別しない) |
| vbTextCompare | 1 | テキスト比較(大/小文字、全/半角を区別しない) |
| vbDatabaseCompare | 2 | 使用不可(Microsoft Access) |
サンプルコード
Debug.Print StrComp("A", "a", vbBinaryCompare) ' -1 Debug.Print StrComp("A", "a", vbTextCompare) ' 0 Debug.Print StrComp("A", "a") ' -1 ※ Option Compareの設定による Debug.Print StrComp("A", "B", vbBinaryCompare) ' -1 Debug.Print StrComp("a", "B", vbBinaryCompare) ' 1 Debug.Print StrComp("a", "B", vbTextCompare) ' -1
解説
文字列の順序(文字コード順にしたときどちらが大きいか)を比較する際は、
StrComp関数が使用できます。
結果値は-1、0、1の3値で判定されますので、
以下の対応から文字列比較の結果を読み取ってください。
| 比較結果 | 文字列の判定 |
|---|---|
| -1 | 文字列1<文字列2 |
| 0 | 文字列1=文字列2 |
| 1 | 文字列1>文字列2 |
| Null | いずれかの文字列がNull |
比較の仕様は「バイナリ/テキスト」の2つを選択することができ、
大文字小文字、全角半角を区別するかどうかを指定できます。
aとBの大小がちょっと複雑ですが、アルファベットだけで概要を説明しますと、
| バイナリ | A < B < C < … < Z < a < b < … |
|---|---|
| テキスト | A = a < B = b < C = c < … |
このような大小関係になっています。
この設定(第3引数)を省略時は通常バイナリ比較が行われますが、
Option Compare Textの宣言モジュールではテキスト比較になります。
よって第3引数は省略時「vbUseCompareOption」だと思われるのですが、
なぜかこの引数を明示するとエラーになります。
しかも「変数が定義されていません」エラーという不思議な挙動。
理由は不明ですが、Option Compareに従わせたい場合は第3引数を省略して下さい。
比較演算子「<」「>」も普通に使用できます。
文字列同士の順序(大小)を比較するのは配列のソートなど、
文字列を並び替えたりする場合が多いかもしれません。
ただ、実際のところ文字列は普通に比較演算子「<」「>」で比較できます。
Debug.Print "A" < "a" ' True
普通にこのコードの方が見やすいので、バイナリ比較はこちらでいい気がします。
StrComp関数は、
- テキスト比較を行いたい(大文字小文字の区別をしたくない)が
- Option Compareでモジュール全体をテキスト比較にはできない
場合の手段としてとらえておくといいのではないかと思います。