語彙的意味に基づく文字列比較とは?(Tips-11)
VBAでは文字列データの比較方法を以下の Option Compare ステートメントで宣言することができます。
Option Compare Binary(又は省略)
- 各文字列の文字コード数値が比較されます。
Option Compare Text
- システムのロケールによって決定され、語彙的意味に基づいて比較されます。
Option Compare Database
- Access でのみ使用するので今回は割愛します。
ふむふむ。よくわからん。
もう少し具体的に書いてみよう。
「Binary」では文字コードの数値が同じか否かを比較します。"A" = "A"であれば、41 = 41 でありTrue。"A" = "a"であれば、41 = 61 であり False。といった具合に。
「Text」では文字コードに加えて語彙的意味での比較が行われます。つまり、文字コードが違っても類縁の文字は等しいとみなされるということです。(半角の「1」と全角の「1」、ひらがなの「あ」とカタカナの「ア」など)
じゃあ、「1」は「1」の他にも「一」「壱」「①」「Ⅰ」「ⅰ」などにもマッチするのでしょうか?
?(・_・;?
するような気もするし、しないような気もする・・・・・・。
何がマッチし何がマッチしないのか・・・・・・。ちょっと試してみましょう。
下の表に文字列のサンプルをいくつかピックアップしました。縦軸の文字と横軸の文字を VBA 内(Option Compare Text)で比較し、結果(True 又は False)を軸が交差する箇所に出力してあります。
サンプルが少ないため若干心もとないですが、比較のルールは大筋で下記のようになっていると思われます。
清音
- ひらがな・カタカナ・全角・半角を区別せずマッチする。濁音・半濁音・捨てかな(カナ)・漢字にはマッチしない。
濁音
- ひらがな・カタカナ・全角・半角を区別せずマッチする。清音・半濁音・捨てかな(カナ)・漢字にはマッチしない。
半濁音
- ひらがな・カタカナ・全角・半角を区別せずマッチする。清音・濁音・捨てかな(カナ)・漢字にはマッチしない。
捨てかな(カナ)
- 捨てかな・捨てカナ・全角・半角を区別せずマッチする。清音・濁音・半濁音・漢字にはマッチしない。
アルファベット
- 大文字・小文字・全角・半角を区別せずマッチする。機種依存文字の似た文字(分音記号付きなど)にはマッチしない。
アラビア数字
- 全角・半角・丸付き数字(環境依存文字)を区別せずマッチする。漢数字・ローマ数字にはマッチしない。
ローマ数字
- 大文字・小文字を区別せずマッチする。アラビア数字・漢数字・丸付き数字にはマッチしない。
全ての文字の比較を試してみたいところですが、組み合わせが膨大なので今日のところは勘弁してやろう(←ぇ)
ちなみに「語彙」とは語の集まりのことなので一文字を示す表現として用いることはできないのですが Microsoft Docs そのような表現が使われていたので使わせてもらいました。
Option Compare ステートメント | Microsoft Docs