いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)IF関数でワイルドカードを使う

 Googleスプレッドシートで、IF関数を使って文字列がワイルドカードにマッチするかどうかの判定結果を返す方法についてです。

  • IF関数とCOUNTIF関数と組み合わせることで、ワイルドカードにマッチするかどうかの判定結果を返すことができます。
  • 正規表現とのマッチを判定できるREGEXMATCH関数と組み合わせるのも一つの方法です。

手順

f:id:accs2014:20201130003314p:plain:right:w500

 右の画像では、B3セルの文字列が「福*」というワイルドカードにマッチしているかどうか、つまり文字列が「福」の字で始まるのかどうかを、D3セルに入力した式で判定しています。

 D3セル

=IF(COUNTIF(B3,"福*"),"福で始まる","福以外で始まる")

 単純に「=IF(B3="福*",……」などとやってもIF関数の条件式ではワイルドカードを使うことができないのでうまくいきません。
 そこでワイルドカードが使えるCOUNTIF関数を使い、「福*」にマッチする文字列の数を数える(結果は0か1にしかなりません)ことで対応しています。
 なお「COUNTIF(B3,"福*")」は「COUNTIF(B3,"福*")>0」とか「COUNTIF(B3,"福*")=1」とした方がわかりやすいですが、0以外の数値はTRUE(真)とみなされるので省略しています。
 

f:id:accs2014:20201130003319p:plain:right:w500

 さらに式を下方にコピーした結果です。
 判定がうまくいっているのがわかります。

 

f:id:accs2014:20201130003324p:plain:right:w500

 こちらでは「*島*」というワイルドカードにマッチするか、つまり「島」の字を含むかどうかの判定をしています。
 D3セルの式は次のとおりです(D4以降も同様)。

 D3セル

=IF(COUNTIF(B3,"*島*"),"島を含む","島を含まない")

REGEXMATCH関数への移行

f:id:accs2014:20201130003328p:plain:right:w500

 さて、REGEXMATCH関数を使えば正規表現とのマッチングを判定できますので、上記の例のCOUNTIF関数の代用とすることができます。
 というかGoogleスプレッドシートではこちらが本筋のやり方かと思います。

 画像ではD3セルに次のような式を入力し、上記の例と同じく「福」の字で始まるかどうかを判定しています(D4以降も同様)。

 D3セル

=IF(REGEXMATCH(B3,"^福"),"福で始まる","福以外で始まる")

 正規表現の「^」は文字列の先頭を表しますので、「^福」は「文字列の先頭にある『福』の字」にマッチします。
 正規表現はワイルドカードと比べて難解ですが非常に応用範囲が広く、覚える価値のあるスキルです。
 

f:id:accs2014:20201130003332p:plain:right:w500

 こちらも同様に「島」を含むかどうか判定しています。

 D3セル

=IF(REGEXMATCH(B3,"島"),"島を含む","島を含まない")

 REGEXMATCH関数では(ワイルドカードでの考え方と異なり)第2引数で指定した正規表現にどこか1つ該当すればマッチするものと判定されます。
 よってREGEXMATCH関数の第2引数は単純に「島」の1字で済みます。