【VBA】StrComp関数で2つの文字列を比較する
概要 | 構文 | 比較モードについて | 使用例 | よくある使い方 | エラーハンドリング | その他のポイント
概要
StrComp関数は、Visual Basic for Applications (VBA) において2つの文字列を比較するための関数です。文字列が等しいか、どちらが大きいか、または小さいかを判定し、その結果を数値で返します。プログラム内で文字列の整合性をチェックしたり、ソート処理や条件分岐の際に利用されるため、初心者でも知っておくと非常に役立つ機能です。
構文
StrComp関数の基本的な構文は次の通りです。
StrComp(string1, string2, [compare])
引数の意味は以下のとおりです。
string1
: 比較対象の1つ目の文字列。string2
: 比較対象の2つ目の文字列。[compare]
: 省略可能な引数で、文字列の比較方法を指定します。
比較モードについて
[compare]
引数は、どのような方法で文字列を比較するかを決定します。主に以下の2種類のモードが用いられます。
- vbBinaryCompare (0): バイナリ比較。文字列中の各文字のASCIIコードやUnicode値に基づき、大文字と小文字を区別して比較します。例えば、”A” と “a” は異なる文字として扱われます。
- vbTextCompare (1): テキスト比較。大文字・小文字の違いを無視して、文字列の内容を比較します。このため、”Apple” と “apple” は同一とみなされます。
なお、[compare]
を省略した場合は、モジュールの先頭で設定された Option Compare
の設定に従います。Option Compare Binary
の場合はバイナリ比較、Option Compare Text
の場合はテキスト比較が既定で行われます。
使用例
以下に、StrComp関数を利用した具体的な例を示します。初心者でも理解しやすいよう、コード例とともに解説します。
例: バイナリ比較(大文字小文字を区別)
Dim result As Integer result = StrComp("Apple", "apple", vbBinaryCompare) ' "Apple" と "apple" はバイナリ比較の場合、大文字小文字が区別されるため、 ' 結果は 0 以外(-1 または 1)が返される。
この例では、”Apple” と “apple” の各文字のコード値を基に比較が行われるため、たとえ文字の内容が似通っていても、結果は等しくなりません。
例: テキスト比較(大文字小文字を無視)
Dim result As Integer result = StrComp("Apple", "apple", vbTextCompare) ' テキスト比較の場合、大文字と小文字の区別が無視されるため、結果は 0 となる。
この例では、”Apple” と “apple” は同じ文字列とみなされ、比較結果として 0 が返されます。ユーザー入力など、大文字小文字の違いを気にしたくない場合に有用です。
例: 数字が含まれる文字列の比較
Dim result As Integer result = StrComp("123", "45", vbBinaryCompare) ' 数字も文字列として扱われ、各文字のASCIIコードが比較されるため、 ' "123" の先頭文字 "1" と "45" の先頭文字 "4" を比較して -1 が返される可能性がある。
数字が含まれていても、StrComp関数はあくまで文字列として扱います。各文字のコード値に基づいて比較されるため、数値としての大小とは異なる結果になることに注意してください。
例: Option Compare の影響
' モジュールの最初に次の記述があるとします。 Option Compare Text Dim result As Integer result = StrComp("Hello", "hello") ' この場合、既定がテキスト比較となるため、結果は 0 となる。
Option Compare
の設定により、[compare]
引数を省略しても比較方法が決定されます。設定が Text
ならば、”Hello” と “hello” は等しいとみなされます。
よくある使い方
StrComp関数は、条件分岐で文字列が一致しているかどうかをチェックする際や、文字列の大小関係を利用してソート処理を実装する場合に多用されます。以下は、ユーザーの入力が期待する値と一致するかどうかを判定する例です。
If StrComp(userInput, expectedValue, vbTextCompare) = 0 Then ' 入力が期待する値と一致する場合の処理 Else ' 一致しない場合の処理 End If
このように、文字列の比較結果が 0 であれば両者が等しいと判断できます。比較結果が 0 以外の場合、-1 または 1 が返されるため、どちらの文字列が「大きい」かも判別できます。
エラーハンドリング
StrComp関数を使用する際には、以下の点に注意してエラーハンドリングを実装することが推奨されます。
-
Null値のチェック: 文字列が
Null
の場合、予期しない動作やエラーが発生する可能性があります。IsNull
関数などを用いて、事前にチェックを行うとよいでしょう。 -
引数の型: StrComp関数は文字列を比較するため、数値やオブジェクトが渡されるとエラーとなる可能性があります。必要に応じて
CStr
関数などで型変換を行いましょう。
If Not IsNull(str1) And Not IsNull(str2) Then Dim result As Integer result = StrComp(CStr(str1), CStr(str2), vbTextCompare) Else ' Null値が含まれている場合の処理 End If
このように、事前のチェックを行うことで、予期しないエラーを防ぐことができます。
その他のポイント
StrComp関数を効果的に利用するための追加のポイントをいくつか紹介します。
-
空文字列 (
""
) の比較も正常に動作します。例えば、空文字列同士の比較は 0 を返します。 - 複雑な文字列処理が必要な場合、文字列のトリミングや大文字・小文字の統一など、事前処理を行ってから比較するとより正確な結果が得られます。
- 国際化対応を考慮する際は、ロケールや文化に依存した文字列比較が必要になる場合もあります。VBA標準のStrCompでは対応が難しい場合、専用のライブラリや関数を利用することも検討してください。
このように、StrComp関数はシンプルながらも強力な文字列比較ツールです。適切な比較モードを選択し、エラーチェックを行うことで、様々なシーンで正確な文字列操作が可能になります。