いきなり答える備忘録

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

(Excel)ワイルドカードで「n文字以上」を指定する方法

 Excelでワイルドカードを使って1文字以上とか2文字以上の文字列を指定する方法についてです。

  • 1つの「*」とn個の「?」を並べれば「n文字以上の任意の文字列」にマッチ(該当)するワイルドカードになります。「*」の位置はどこでもいいです。

手順

 まずは文字列が1文字以上かどうかの判定に用いる例です。
 次の画像では空白セルと空文字列(いずれもLEN関数では0文字とみなされます)、そして3つの文字列について、ワイルドカードを使った式で「1文字以上かどうか」を判定しています。

 C3セル(下方にフィルコピー)

=IF(COUNTIF(B3,"*?"),"○","×")

 ワイルドカードの「*」は0文字以上の文字に、「?」は1文字の文字にマッチするワイルドカードです。よって「*?」とすれば「1文字以上」にマッチします。逆にして「?*」としてもOKです。
 単純に「=IF(B3="*?","○","×")」のようにできればいいもののそうはできないので、ワイルドカードが使えるCOUNTIF関数を使い「COUNTIF(B3,"*?")」としています。これはB3セルが1文字以上なら1を、0文字なら0を返します。さらにIF関数を重ねることで1文字以上なら「○」を、0文字なら「×」を表示させています。
 ただしこの例のように文字列全体の文字数を判定するならLEN関数を使った方が簡単で、数値についても判定できて便利です(ワイルドカードは数値にマッチしないので注意が必要です)。
 なお上記の式中の「*?」を単純に「*」とした場合、空白セルが「×」空文字列が「○」と判定されます。空文字列は0文字の文字列なのでマッチしてしまうというわけです。



 次はもっと実用的な例です。
 SUMIF関数を使い、2文字以上の市(最後の「市」の文字以外に2文字以上)の人口の合計を求めています(355+113+58=526)。

 E3セル

=SUMIF(B3:B8,"*??市",C3:C8)

 繰り返しになりますがワイルドカードの「*」は0文字以上に、「?」は1文字にマッチするので、「*??」は2文字以上の文字にマッチします(「?*?」や「??*」としても同じ)。
 これに「市」を加えて「*??市」とすることで「2文字以上の文字の後に『市』が続いて終わる文字列」にマッチすることとなります。
 この条件はLEN関数等を組み合わせても表現はできますがSUMIF関数には適用できないので、このようにワイルドカードを使うのが便利です。

備考

 ワイルドカードは数値や日付にはマッチしないので判定誤りや集計漏れに注意してください。
 関数側での対応はなかなか複雑なので、数値や日付は文字列に変換してしまうのが最も確実です。