いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)文字や数字を厳密に比較する

 Googleスプレッドシートで、イコールによる値の比較とEXACT関数による値の比較の結果をみるとともに、これらの方法よりさらに厳密に比較する例を示します。

  • イコール(=)による比較では「大文字と小文字」「全角と半角」「0と空白」「空文字列と空白」が区別できません。
  • EXACT関数による比較は比較的厳密ですが、「文字列化された半角数字と数値」「空文字列と空白」が区別できません。
  • これらにより区別できないケースに対応するには、新たに式を作る必要があります。

手順

f:id:accs2014:20200719133838p:plain:right:w550

 B列とC列に、比較対象となる文字列や数値を何組か並べています。
 そこでイコール(=)による比較とEXACT関数による比較を試してみます。
 まずはD3セルに「=B3=C3」と入力し、さらにE3セルに「=EXACT(B3,C3)」と入力します。これらを確定し、さらに式を下方にフィルコピーすると……

f:id:accs2014:20200719133843p:plain:right:w550

 このようになります。
 「TRUE」は等しいと評価していることを表し、「FALSE」は異なると評価していることを表しています(セルの着色は条件付き書式によるものです)。
 イコールによる比較は日常的に使われますが、一見異なるものについても等しいと評価されるケースが多いことが分かります。
 また、EXACT関数の方は比較的厳しい判定になっていますが、これでも等しいと判定するケースがあることがわかります。
 整理すると次のようになります。

  • イコール(=)による比較
    • 大文字と小文字を区別しない(等しいものとみなす)
    • 全角と半角を区別しない(ただし数字は区別する)
    • 数値の0(半角0)と空白(値がない)を区別しない
    • 空文字列(="")と空白を区別しない
  • EXACT関数による比較
    • 文字列として記録されている半角数字と数値である半角数字を区別しない
    • 空文字列(="")と空白を区別しない
 

 どのようなケースを等しいものとみなすかはまさにケースバイケースですが、上記のような「許容」の例を極力除いて判定する例として、次の画像ではF3セルに式を入力して下方にコピーしています。
 (14行目以下には、等しいと判定すべきケースを4つ追加しています)

f:id:accs2014:20200719133847p:plain:w700

 F3セルの式は次のとおりです。

=AND(EXACT(C3,D3),ISNUMBER(C3)=ISNUMBER(D3),ISBLANK(C3)=ISBLANK(D3))

 この式では、次の3つの条件をすべて満たすときに等しいものと評価し、1つでも満たしていなければ異なるものとして評価しています。

  • 2つの値がEXACT関数により等しいと評価されている
  • 2つの値がいずれも数値である、またはいずれも数値でない
  • 2つの値がいずれも空白である、またはいずれも空白でない
 これにより上記で整理した「許容」のパターンはすべて解消されています。もしこれ以上に厳格な比較があるとすれば、さらに条件をAND関数内に追加していくこととなります。