21
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Excel】 ワイルドカード文字について詳解

Last updated at Posted at 2016-09-07

#Tips「Excelで使えるワイルドカード表現」

便利だけど分かり辛いワイルドカード表現の使い方について

image.png

ワイルドカード文字の意味

公式リファレンスでは以下のように説明されている
但し、かなり分かりづらく、誤解を招く書き方である

検索条件 には、半角の疑問符 (?) または半角のアスタリスク (*) をワイルドカード文字として使うことができます。ワイルドカード文字の疑問符任意の 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)には反応しない

image.png

###ワイルドカードを使用したCONUTIF関数の検索条件に様々な値を入れたときの挙動

ワイルドカード文字?の動作が「任意の文字列であり、かつ文字数が1文字の文字列」であることを分かりやすくするため、対象の文字数を調べることができるLEN関数の動作も参考のために示す。
=COUNTIF(●●,"*")の計算結果が1以上であり、かつ=LEN(●●)の計算結果が1になる行のみ、=COUNTIF(●●,"?")の計算結果も1になっている。

image.png

####文字列の例
セルの内容が以下のような値や数式であったとき、そのデータは原則的に文字列である
a aaa01 ="aaa01" ="" ="100" - } ="TRUE"

注)
""は空文字を表しており、文字数が0文字の文字列である
空文字はIF文で条件に合わなかったときに何も表示したくないときによく使われる

IF関数内での空文字の使用例
=IF($A2>5,"条件にヒットしました","")

image.png

未入力のセルとは見た目が同じでも意味や挙動が異なるため注意

####文字列でないものの例
セルの内容が以下のような値や数式であったとき、そのデータは文字列以外(数値や真偽値)であり、ワイルドカード文字が反応しない
100 =100 -1 =TRUE =TODAY() =NOW()

また、未入力のセルには文字列どころかデータが存在しないため、こちらにも反応しない


##ワイルドカード文字の使いどころ

①一部の関数内

ワイルドカード文字は、以下のような関数内の検索条件として有効である

A1セルがcで始まってtで終わることを判定する数式_1
A1:current
B1:=NOT(NOT(COUNTIF($A$1,"c*t")))
   =NOT(NOT(1))
   =NOT(FALSE)
   =TRUE

image.png

IF文内の条件として利用するときは上の数式のNOT()をすべて外した状態でも動く

A1セルがcで始まってtで終わることを判定する数式_2
A1:current
B1:=IF(COUNTIF($A$1,"c*t"),"●","×")
   =IF(1,"●","×")
   =IF(TRUE,"●","×")
   ="●"

image.png

▼理由
【Excel】IF文の条件判定について(truthyとfalsy)

また、以下のようにアスタリスクのみでCOUNTIFを行えば、対象セルに文字列データが入っていることを判定できる

A1からA30セル中で文字列が入っているセルの数をカウントする数式
=COUNTIF($A$1:$A$30,"*")

image.png

A1セルに文字列が入っていることを判定する数式
=IF(COUNTIF($A$1,"*"),"●","×")

image.png

②検索機能

「Ctrl F」によって呼び出す検索機能や「Ctrl H」によって呼び出す置換機能中の検索文字列内でもワイルドカード文字が使用できる

image

注)
「セル内容が完全に同一のものを検索する」のオプションにチェックを入れなかったとき、
「検索する文字列」の左端と右端の両方ににアスタリスク*が入った検索とほぼ同じ動作を行う

catで「セル内容が完全に同一のものを検索する」のオプションにチェックを入れずに検索することは、
*cat*で「セル内容が完全に同一のものを検索する」のオプションにチェックを入れて検索することとほぼ同じ(厳密には異なる)


##「=(イコール)」で比較したときのワイルドカード文字のふるまい

「=(イコール)」による比較を行ったときに*などのワイルドカード文字を使用したとき、ワイルドカード文字はただの文字と見做されて処理される

example1
A1:current
B1:=$A$1="c*t"
   =FALSE
example2
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([[検索対象の語]], [[ワイルドカード文字を含む検索条件]]),"●","×")

image


##文字列検索時に*?そのものを探したい(エスケープ処理)

文字列検索時に?*をそのままの記号として扱いたいときはチルダ記号「~」をワイルドカード文字の前に付けてあげればOK

ワイルドカード文字ではなく、通常の文字として疑問符やアスタリスクを検索する場合は、その文字の前に、"~*" のように半角のチルダ (~) を付けます。
https://support.office.com/ja-jp/article/SUMIF-%E9%96%A2%E6%95%B0-169b8c99-c05c-4483-a712-1697a653039b

URL中の?記号を含めた文字列の完全一致判定を行う
A1:http://hoge.com?q=foo
B1:=IF(COUNTIF($A$1,"http://hoge.com~?q=foo"),"●","×")
   =IF(1,"●","×")
   =IF(TRUE,"●","×")
   ="●"

チルダ記号を付けたとき、ワイルドカード文字はただの文字として動くので、~??以外の文字にはマッチしない

example
A1:http://hoge.comaq=foo
B1:=IF(COUNTIF($A$1,"http://hoge.com~?q=foo"),"●","×")
   =IF(0,"●","×")
   =IF(FALSE,"●","×")
   ="×"
21
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?