記事の概要
Qiita社内のビジネス職メンバーにワイルドカード使いが少なくて寂しいので、布教活動です。
ワイルドカードを関数と組み合わせることで、Excelやスプレッドシートを使う業務がちょっと楽になるかもしれません。
Excelやスプレッドシートにおけるワイルドカードとは?
メジャーリーグでは、各地区優勝チームを除いたチームの中から勝率上位3チームに与えられるポストシーズン出場枠。
トランプをはじめとするカードゲームでは、ジョーカーのように何にでも代用できる特別なカード。
…など、様々な意味がありますが、Excelやスプレッドシートでは、特定の文字や文字列の代わりに記号を用いて、部分一致検索やあいまい検索を可能にします。
スプレッドシートで使えるワイルドカード
スプレッドシートで使えるワイルドカードは下記3つです。
-
*(アスタリスク)- 任意の文字列を指定する際に使用します。
-
?(クエスチョンマーク)- 任意の1文字を指定する際に使用します。
-
~(チルダ)- 検索したい条件に
*か?が含まれており、それらの記号をワイルドカードとして扱いたくない(エスケープしたい)ときに使用します。
- 検索したい条件に
?は使わずにすべて*で事足りるのでは?とも思うかもしれませんが、?は1文字しか指定できない = 検索や集計をする文字数が厳密に固定されるということなので、ノイズや表記ゆれを探し当てることができるなどのメリットもあります。
ワイルドカードを使用できるスプレッドシート関数の例
- 特定の条件を満たすデータの集計をする関数
-
COUNTIF,COUNTIFS -
SUMIF,SUMIFS -
AVERAGEIF,AVERAGEIFS
-
- 検索 / 参照
-
XLOOKUP- 引数の一致モードを省略すると問答無用で 「完全一致」 になるので、一致モードは
2と指定してワイルドカードを使ってください。
- 引数の一致モードを省略すると問答無用で 「完全一致」 になるので、一致モードは
VLOOKUPHLOOKUPMATCH
-
IF や FILTER など、単体ではワイルドカードを使うことができない関数もあるので、それらの関数を使いたい場合は、上記の関数を組み合わせることでワイルドカード使用できるようになります。特に COUNTIF は使い勝手が良いと思います。
無理やりワイルドカードを使うより REGEXMATCH を使ったほうが楽な場合もありますが、正規表現の話になってしまうので、この記事では割愛します。
使用例
*(アスタリスク)の使用例
部分一致
例えば、A-001 を含む番号が りんご だった場合、 =COUNTIF(A:A,"*A-001*") で、りんごの種類がいくつあるのか、
=SUMIF(A:A,"*A-001*",C:C) で、在庫の合計を求めることができます。
前方一致
A-001 からはじまる番号が りんご だった場合、 =COUNTIF(A:A,"A-001*") で、りんごの種類がいくつあるのか、
=SUMIF(A:A,"A-001*",C:C) で、在庫の合計を求めることができます。
後方一致
例えば、番号の末尾が -001 で終わる商品をカウントしたい場合は、 =COUNTIF(A:A,"*-001") 、
在庫の合計は、=SUMIF(A:A,"*-001",C:C) で求めることができます。
?(クエスチョンマーク)の使用例
A-001 から始まる番号が りんご だった場合、 =COUNTIF(A:A,"A-001-???") で、りんごの種類がいくつあるのか、
=SUMIF(A:A,"A-001-???",C:C) で、在庫の合計を求めることができます。
また、検索や集計をする文字数が厳密に固定できるため、このように4文字を指定すると、A-002 ではじまる番号がほかに2つあっても、末尾が4文字のもの以外カウントしない。という使い方もできます。
~(チルダ)の使用例
A* から始まるものを数えたい場合は、 =COUNTIF(A:A,"*A~**") 、
A*-001 を含むものを数えたい場合は、=COUNTIF(A:A,"*A~*~-001*") のように、検索したい条件に * か ? が含まれている場合は ~ でエスケープすることができます。
文字列ではなくセルを指定する場合
*を用いた部分一致の場合は、 =COUNTIF(A:A,"*"&F3&"*") 。
前方一致なら =COUNTIF(A:A,F3&"*") 、 後方一致なら=COUNTIF(A:A,"*"&F3) と、& を使用して指定したいセルと*をつなぎます。
? の場合は、 =COUNTIF(A:A,F3&"-???") になります。
急に&が出てきましたが、難しく考えることはないです。イメージはこれです。
とくに * は掛け算や正規表現でも用いる記号なので分かりにくくなるところだと思いますが、 ワイルドカードの * や ? は、 検索パターンを指定するための特殊な文字 という扱われ方をするので、 "Advent Calendar" のように " で囲って & でつなぎましょう。
日付
日付はデフォルトだと文字列ではなくシリアル値なため、そのままだとワイルドカードを使えません。
もしワイルドカードを使いたい場合は、=TEXT(2025/12/25,"yyyy年mm月") , =TEXT(2025/12/25,"yyyy/mm") , =TEXT(2025/12/25,"yyyy-mm")のように TEXT関数で文字列にするとよいです。
例えば、文字列に変換するために1列増やして、 =TEXT(A3,"yyyy年mm月") でワンクッション置いて
=SUMIF(B:B,"*"&G2&"*",C:C)とすれば、A列が2025年9月のものだけ計算できます。
※このとき、G2の値も文字列である必要があるので、「表示形式の詳細設定」を「書式なしテキスト」にしています。
















