Accessでデータを蓄積していくと、文字列の大文字と小文字、半角と全角といった情報が混在するケースが多くみられるようになります。(例えば、「AIUEO」と「aiueo」のような違いです。)
すると、同じ情報でも、これらを別の情報として管理してしまい、せっかくのデータを有効活用できなくなるおそれがあります。
そのため、適切な時期にデータの更新をかける必要があるのです。
文字列を比較する方法としてIIf関数を用いて、2つのフィールドを比較することで、一致、不一致を評価できそうなものですが、実は、「大文字と小文字」、「半角と全角」は同じ文字列として判定されてしまい、うまくいきません。
そのようなときに活用できる関数が、StrComp関数です。
StrComp関数について
まずは、StrComp関数の一般式を確認していきましょう。
StrComp(string1、 string2、[ compare ])
ここで、引数の「string1」と「string2」はそれぞれ必須項目であり、任意の有効な文字列式を指定することで、これらの比較をします。
また、引数の「compare」は省略可能ではありますが、文字列比較の種類を指定する際に用います。
表1 compare引数の設定値(一部)
定数 | 値 | 説明 |
vbBinaryCompare | 0 | バイナリ比較を実行する。 ※大文字と小文字、半角と全角等を区別します。 |
vbTextCompare | 1 | テキスト比較を実行する。 |
表2 StrComp関数の戻り値
条件 | StrCompの戻り値 |
string1 が string2より小さい | -1 |
string1 が string2と等しい | 0 |
string1 が string2より大きい | 1 |
string1 又は string2がNullである | Null |
ここで、文字列の大小はASCIIの順番等で決まりますが、今回の目的ではあまり意味をなさないため、まずは戻り値が「0」であれば一致しており、「0」以外の値が返された場合は不一致と判断していただければ宜しいかと思います。
さて、上述の基本的な内容を踏まえて、次からはStrComp関数の処理を確認するための準備をしていきましょう。
サンプルデータ
StrComp関数の処理の様子を確認するために、サンプルデータを用意します。サンプルデータを格納するために、「T_StrComp」テーブルを作成し、「テキスト1」及び「テキスト2」のフィールドを作成します。これらフィールドは「短いテキスト」のデータ型として定義します。
次に、表3に示すサンプルデータを登録します。
表3 サンプルデータ
テキスト1 | テキスト2 |
あいうえお | あいうえお |
アイウエオ | アイウエオ |
アイウエオ | アイウエオ |
aiueo | aiueo |
AIUEO | aiueo |
以上でサンプルデータが用意できましたので、クエリを作成してStrComp関数の処理結果を確認していきましょう。
StrComp関数の処理確認
ここでは、クエリを用いて処理の様子を確認していきます。また、冒頭でご紹介したIIf関数を用いた場合の処理結果も併せて確認したいと思います。
図1に示すように、クエリ中に作成した「T_StrComp」テーブルを追加し、「テキスト1」及び「テキスト2」フィールドを【フィールド】項目に追加します。
続いて、IIf関数による処理とStrComp関数による処理をそれぞれ【フィールド】項目に追加します。ここで、StrComp関数については、バイナリ比較とテキスト比較のそれぞれを設定しました。
◆ IIfによる比較: IIf([テキスト1]=[テキスト2],”一致”,”不一致”)
◆ バイナリ比較: StrComp([テキスト1],[テキスト2],0)
◆ テキスト比較: StrComp([テキスト1],[テキスト2],1)
さて、これで準備ができましたので実際の処理結果を確認してみてください。データシートビューで各関数による処理結果を表示させます(図2)
図2に示すように、IIf関数を用いた場合、全てのレコードで文字列が一致していると判定されます。
また、StrComp関数(テキスト比較)についても、IIf関数による評価結果と同様に全てが「0 = 一致」として判定されていることが分かります。
一方で、StrComp関数(バイナリ比較)の場合、「0」の結果が返されているレコードの「テキスト1」と「テキスト2」の文字列が完全一致しており、「全角と半角」、「小文字と大文字」を区別して判定していることが分かります。
余談として、カタカナの比較結果で示したとおり不一致の場合に「-1」と「1」が表示されますが、「テキスト1」と「テキスト2」をASCII変換(Asc関数を用いることで変換できます。)してあげるとそれぞれの値を数値で示すことができます。例えば、「アイウエオ」の場合は「-31935」に、「アイウエオ」の場合は「177」といった具合です。このように数値の大小で比較をすることができますので、これをもとに表2に示す結果が返されることになります。
しかしながら、今回のような単純な比較だけの場合は「0」以外が不一致であると判断していただければ問題ありません。
まとめ
今回は、StrComp関数を用いて「大文字と小文字」、「半角と全角」といった細かい部分まで文字列を比較するための方法を紹介しました。万能のように思われがちなIIf関数ですが、使い方を間違えると痛い目を見てしまうことがあります。目的に合わせた関数を用いることで、効率良くデータ処理をしていただければと思います。
スポンサーリンク
コメント