#Tips「Excelで使えるワイルドカード表現」
便利だけど分かり辛いワイルドカード表現の使い方について
ワイルドカード文字の意味
公式リファレンスでは以下のように説明されている
但し、かなり分かりづらく、誤解を招く書き方である
検索条件 には、半角の疑問符 (
?
) または半角のアスタリスク (*
) をワイルドカード文字として使うことができます。ワイルドカード文字の疑問符は任意の 1 文字を表し、アスタリスクは 1 文字以上の任意の文字列を表します。ワイルドカード文字ではなく、通常の文字として疑問符やアスタリスクを検索する場合は、その文字の前に、"~*"
のように半角のチルダ (~
) を付けます。
https://support.office.com/ja-jp/article/SUMIF-%E9%96%A2%E6%95%B0-169b8c99-c05c-4483-a712-1697a653039b
ワイルドカード文字の意味(数式中での挙動)
実際の挙動から解釈するに、以下のように覚えるのが正しい
ワイルドカード文字 | 意味 |
---|---|
* |
0文字以上の「任意の文字列」を表す("空文字"を含む。未入力のセルは含まない) |
? |
「任意の文字列」であり、かつ「文字数が1文字の文字列」を表す |
※空文字については後述
##ワイルドカード文字を理解するための前提
数式中において、ワイルドカード文字が表すものはあくまで文字列である
対象セルのデータが文字列であれば反応するが、数値や真偽値(TRUE,FALSE)には反応しない
###ワイルドカードを使用したCONUTIF関数の検索条件に様々な値を入れたときの挙動
ワイルドカード文字?
の動作が「任意の文字列であり、かつ文字数が1文字の文字列」であることを分かりやすくするため、対象の文字数を調べることができるLEN関数の動作も参考のために示す。
=COUNTIF(●●,"*")
の計算結果が1以上であり、かつ=LEN(●●)
の計算結果が1になる行のみ、=COUNTIF(●●,"?")
の計算結果も1になっている。
####文字列の例
セルの内容が以下のような値や数式であったとき、そのデータは原則的に文字列である
a
aaa01
="aaa01"
=""
="100"
-
}
="TRUE"
注)
""
は空文字を表しており、文字数が0文字の文字列である
空文字はIF文で条件に合わなかったときに何も表示したくないときによく使われる
=IF($A2>5,"条件にヒットしました","")
未入力のセルとは見た目が同じでも意味や挙動が異なるため注意
####文字列でないものの例
セルの内容が以下のような値や数式であったとき、そのデータは文字列以外(数値や真偽値)であり、ワイルドカード文字が反応しない
100
=100
-1
=TRUE
=TODAY()
=NOW()
また、未入力のセルには文字列どころかデータが存在しないため、こちらにも反応しない
##ワイルドカード文字の使いどころ
①一部の関数内
ワイルドカード文字は、以下のような関数内の検索条件として有効である
- COUNTIFなどのIF系集計関数/COUNTIFSなどのIFS系関数(CONUTIF, SUMIF, SUMIFS, AVERAGEIFS, …)
- SEARCH, MATCH, VLOOKUP, HLOOKUP
A1:current
B1:=NOT(NOT(COUNTIF($A$1,"c*t")))
=NOT(NOT(1))
=NOT(FALSE)
=TRUE
IF文内の条件として利用するときは上の数式のNOT()をすべて外した状態でも動く
A1:current
B1:=IF(COUNTIF($A$1,"c*t"),"●","×")
=IF(1,"●","×")
=IF(TRUE,"●","×")
="●"
▼理由
→ 【Excel】IF文の条件判定について(truthyとfalsy)
また、以下のようにアスタリスクのみでCOUNTIF
を行えば、対象セルに文字列データが入っていることを判定できる
=COUNTIF($A$1:$A$30,"*")
=IF(COUNTIF($A$1,"*"),"●","×")
②検索機能
「Ctrl F」によって呼び出す検索機能や「Ctrl H」によって呼び出す置換機能中の検索文字列内でもワイルドカード文字が使用できる
注)
「セル内容が完全に同一のものを検索する」のオプションにチェックを入れなかったとき、
「検索する文字列」の左端と右端の両方ににアスタリスク*
が入った検索とほぼ同じ動作を行う
cat
で「セル内容が完全に同一のものを検索する」のオプションにチェックを入れずに検索することは、
*cat*
で「セル内容が完全に同一のものを検索する」のオプションにチェックを入れて検索することとほぼ同じ(厳密には異なる)
##「=(イコール)」で比較したときのワイルドカード文字のふるまい
「=(イコール)」による比較を行ったときに*
などのワイルドカード文字を使用したとき、ワイルドカード文字はただの文字と見做されて処理される
A1:current
B1:=$A$1="c*t"
=FALSE
A1:c*t
B1:=$A$1="c*t"
=TRUE
上記のような比較でワイルドカード文字を使用したいときは、以下のような数式を使えばOK
=IF(COUNTIF($A$1,"c*t"),TRUE)
##ワイルドカード文字を使った検索結果の例
ワイルドカード文字を使った文字列の比較を関数内で行いたいときは、COUNTIF
を使う
ワイルドカード文字を含む「c?t
」「c*t
」「ct*
」「*ct
」「*ct*
」は文字列検索において、
以下の表の「●」が付いている文字列とマッチが成立する
=IF(COUNTIF([[検索対象の語]], [[ワイルドカード文字を含む検索条件]]),"●","×")
##文字列検索時に*
や?
そのものを探したい(エスケープ処理)
文字列検索時に?
や*
をそのままの記号として扱いたいときはチルダ記号「~」をワイルドカード文字の前に付けてあげればOK
ワイルドカード文字ではなく、通常の文字として疑問符やアスタリスクを検索する場合は、その文字の前に、
"~*"
のように半角のチルダ (~
) を付けます。
https://support.office.com/ja-jp/article/SUMIF-%E9%96%A2%E6%95%B0-169b8c99-c05c-4483-a712-1697a653039b
例
A1:http://hoge.com?q=foo
B1:=IF(COUNTIF($A$1,"http://hoge.com~?q=foo"),"●","×")
=IF(1,"●","×")
=IF(TRUE,"●","×")
="●"
チルダ記号を付けたとき、ワイルドカード文字はただの文字として動くので、~?
は?
以外の文字にはマッチしない
A1:http://hoge.comaq=foo
B1:=IF(COUNTIF($A$1,"http://hoge.com~?q=foo"),"●","×")
=IF(0,"●","×")
=IF(FALSE,"●","×")
="×"