今日はこんなお困りごとを解決します。
Excelエクセルでのワイルドカード「*」「?」の使い方を例題を用いてくわしく解説していきます。
- CASE1:「*(半角アスタリスク)」を使った部分一致検索で関数計算する
(SUMIF関数 / COUNTIF関数 / VLOOKUP関数) - CASE2:「?(半角クエスチョンマーク)」を使った部分一致検索で関数計算する
(SUMIF関数 / COUNTIF関数 / VLOOKUP関数)
そもそもワイルドカードとは?という人は、こちらの基礎知識編をご参照ください♩
Excel(エクセル)でよく使う「ワイルドカードとは」一体何か理解していますか?本記事では、ワイルドカードとは何?という疑問とワイルドカートの使い方を徹底的に解決していきます。ワイルドカードを使うと関数などさまざまな作業がとっても楽になるので使い方を覚えましょう。
今日は実際に関数と組み合わせての実践編になります。さっそくいきましょう!
CASE1:Excel関数式のワイルドカード「*(半角アスタリスク)」の使い方
ワイルドカード「*」が示す意味合いをおさらい
「*」・・・「任意の0文字以上の文字列」を示す
なんの文字でもいいので0文字以上の文字列と置き換えることができる
(字数に限らずすべての文字・スペースにも一致)
●例)「ねこ*」で検索する
➔「ねこ〇〇(後に続く文字は何文字でも可)」「ねこ」に一致
●例)「*1」で検索する
➔「〇〇1(前に続く文字は何文字でも可)」「1」に一致
代替文字が0文字でも一致するので「ねこ」「1」にも一致するというわけです。
一方で「こねこ」や「12」には一致しません。
SUMIF関数で合計値を求める
「*」を使って一致したデータの合計値を求めていきます。
例:セルF4にクラス1組の合計得点を算出したい
(A列の学生番号で先頭文字が「1-」となっているのが1組)
その人が何組に属しているのかクラスを判別するため "キー" となるのが「1-」など学生番号の先頭文字なので、SUMIFの「検索条件」に学生番号先頭文字の部分一致を指定すればOK!
1セルF4にSUMIF関数を入力していく
検索条件には、「*」を使って学生番号先頭文字の部分一致を指定する
●範囲:$A$3:$C$12
関数コピーしたとき指定範囲をずらしたくないので絶対参照にしておく
●検索条件:"1-*"
「1-○○○」に一致させたいので「1-*」とする、また文字列扱いになるので両端を「"」で囲う
●合計範囲:C$3:$C$12
関数コピーしたとき指定範囲をずらしたくないので絶対参照にしておく
2 関数式は以下のようになる
「=SUMIF($A$3:$B$12,"1-*",$C$3:$C$12)」となる
3「1-〇〇」に一致するデータの合計点が算出される
ここからさらに2組、3組の合計を算出したい場合は
セルF4のSUMIF関数をオートフィルでコピーして検索条件の部分だけを「"2-*"」「"3-*"」と変更すればOK。
関数式内で文字列を指定する場合は使用する関数に関わらず必ず「"(半角ダブルクォーテーション)」で囲うこと。
囲わないと以下のようにエラーとなります。
この記事を見ている人におすすめベストセラー
COUNTIF関数でデータの個数を数える
「*」を使って一致したデータの個数を求めていきます。
例:クラスが1組の人の合計人数をカウントしたい
(A列の学生番号で先頭文字が「1-」となっているのが1組)
その人が何組に属しているのかクラスを判別するため "キー" となるのが「1-」など学生番号の先頭文字なので、COUNTIFの「検索条件」に学生番号先頭文字の部分一致を指定すればOK!
1セルF4にCOUNTIF関数を入力していく
検索条件は「*」を使って学生番号先頭文字の部分一致を指定する
●範囲:$A$3:$A$12
下段へ関数コピーしたときに指定範囲をずらさないために絶対参照にしておく
●検索条件:"1-*"
「1-○○○」に一致させたいので「1-*」とする、また文字列扱いになるので両端を「"」で囲う
2関数式は以下のようになる
=COUNTIF($A$3:$A$12,"1-*")
3「1-〇〇」に一致するデータの合計個数が算出される
ここからさらに2組、3組の学生人数も算出したい場合は
セルF4のCOUNTIF関数式をオートフィルコピーしてそれぞれ検索条件の部分だけを「"2-*"」「"3-*"」と変更すればOK。
VLOOKUP関数で一致データと同じ行にあるデータを取り出す
「*」を使って一致したデータの隣接データを引っぱり出してきます。
例:セルF4に名字だけを入力して一致する人物の得点を取り出してきたい
(名前の・以降の部分を名字とする)
名字だけを一致させて人物を特定したいので、VLOOKUPの「検索値」で名前の後半部分のみの一致を指定すればOK。
1セルF4にVLOOKUP関数式を入力していく
●検索値:"*イェーガー"
「○○○イェーガー」に一致させたいので「*イェーガー」とし、また文字列扱いになるので両端を「"」で囲う
●範囲:$B$3:$C$12
関数をコピーしたときに範囲をずらしたくないので絶対参照にしておく
●列番号:2
範囲のうち取り出したいデータは2列目
●検索方法:0
完全一致で検索したいので「0」もしくは「FALSE」と記述
2関数式は以下のようになる
=VLOOKUP("*イェーガー",$B$3:$C$12,2,0)
3「〇〇イェーガー」に一致するデータの得点が取り出されました
ここからさらにスミスさん、ブラウンさんの得点も取り出したい場合は
セルF4のCOUNTIF関数式をオートフィルコピーしてそれぞれ検索値の部分だけを「"*スミス"」「"*ブラウン"」と変更すればOK。
上の例では、VLOOKUPの検索値に直接「指定したい文字列」を組み込んで処理しましたが、セル番号を指定する方法でもOKです。
例えば、セルE4に「*イェーガー」と入力しておいて、セルF4のVLOOKUP関数では「=VLOOKUP(E4,$B$3:$C$12,2,0)」と入力する方法です。そうするとセルE4に入った文字列を検索値として計算してくれます。
関数式内に文字列を組み込んでいるわけではないので、この場合「"」で囲う必要はありません。
CASE2:Excel関数式のワイルドカード「?(半角クエスチョンマーク)」の使い方
ワイルドカード「?」が示す意味合いをおさらい
「?」・・・「任意の1文字」を示す
なんの文字でもいいので1文字と置き換えることができる
1文字なら「?」2文字なら「??」と置き換えたい文字数分重ねて使うことで何文字でも指定することができる
(字数に限らずすべての文字・スペースにも一致)
●例)「?ねこ」で検索する
➔「こねこ」など「〇ねこ(ねこの前は1文字に限る)」に一致
●例)「1???」で検索する
➔「1234」や「1010」など「1〇〇〇(1の後は3文字に限る)」に一致
「*」とは違い0文字には一致しないので「ねこ」「1」「12」「123」には一致しません。
「?」の個数分の文字列にしか一致しないので注意しましょう。
SUMIF関数で合計値を求める
「?」を使って一致したデータの合計値を求めていきます。
例:セルF5にクラス1組の合計得点を算出したい
(A列の学生番号で先頭文字が「1-」となっているのが1組)
クラスを判別するため "キー" が学生番号の先頭文字なので、SUMIFの「検索条件」に「1-」の部分一致を指定。さらに末尾は3ケタなので3つ「???」を重ねればOK!
1F4にSUMIF関数を入力していく
検索条件には、「?」を使って学生番号先頭文字の部分一致を指定する
●範囲:$A$3:$C$12
関数コピーしたとき指定範囲をずらしたくないので絶対参照にしておく
●検索条件:"1-???"
「1-○○○(-以降は3文字)」に一致させたいので「1-???」とする、また文字列扱いになるので両端を「"」で囲う
●合計範囲:C$3:$C$12
関数コピーしたとき指定範囲をずらしたくないので絶対参照にしておく
2関数式は以下のようになる
「=SUMIF($A$3:$B$12,"1-???",$C$3:$C$12)」
3クラス「1-???」に一致するデータの合計点が算出されました
ここからさらに1組、2組の合計得点も出したい場合は
セルF4のSUMIF関数式をオートフィルコピーしてそれぞれ検索条件を「"2-???"」「"3-???"」と変更すればOK。
またこれは「*」とは違い、「1-○○○」と任意の3文字を指定するものなので、A列データの末尾がすべて3ケタであるゆえに使えます。
例えば「1-0001」のように末尾が4ケタのデータが含まれる場合には「"1-???"」という指定の仕方はできないので注意しましょう!
COUNTIF関数でデータの個数を数える
「?」を使って一致したデータの個数を求めていきます。
例:クラスが1組の人の合計人数をカウントしたい
(A列の学生番号で先頭文字が「1-」となっているのが1組)
クラスを判別するため "キー" が学生番号の先頭文字なので、COUNTIFの「検索条件」に「1-」の部分一致を指定。さらに学生番号の末尾は3ケタなので3つ「???」を重ねればOK!
1セルF4にCOUNTIF関数を入力していく
検索条件には、「?」を使って学生番号先頭文字の部分一致を指定する
●範囲:$A$3:$C$12
関数コピーしたとき指定範囲をずらしたくないので絶対参照にしておく
●検索条件:"1-???"
「1-○○○(-以降は3文字)」に一致させたいので「1-???」とする、また文字列扱いになるので両端を「"」で囲う
2関数式は以下のようになる
=COUNTIF($A$3:$A$12,"1-???")
3クラス「1-???」に一致するデータの個数が算出されました
この場合も学生番号が「-」以下がすべて3文字のデータであるゆえに使えることを注意しましょう。
ここからさらに2組、3組の学生人数も算出したい場合は
セルF4のCOUNTIF関数式をオートフィルコピーしてそれぞれ検索条件の部分だけを「"2-???"」「"3-???"」と変更すればOK。
VLOOKUP関数で一致データと同じ行にあるデータを取り出す
「?」を使って一致したデータの隣接データを引っぱり出してきます。
例:文字の一部だけを指定して得点を取り出してきたい
この場合、苗字だけを一致させてデータを取り出ししたいのですが「同じ苗字」もいるため少し工夫が必要です。
同じ苗字でも名前の文字数が違うのでそこを判別すればOK。
「リヴァイ・」は5文字なので、VLOOKUPの検索値を「?????」と?を5つ重ねて指定することで条件被りを避けられる。
1セルF4にVLOOKUP関数式を入力していく
●検索値:"?????アッカーマン"
「〇〇〇〇〇アッカーマン」に一致させたいので「?」を5つ重ねて、また文字列扱いになるので両端を「"」で囲う
●範囲:$B$3:$C$12
関数をコピーしたときに範囲をずらしたくないので絶対参照にしておく
●列番号:2
範囲のうち取り出したいデータは2列目
●検索方法:0
完全一致で検索したいので「0」もしくは「FALSE」と記述
2関数式は以下のようになる
=VLOOKUP("?????アッカーマン",$B$3:$C$12,2,0)
3「?????アッカーマン」に一致するデータの得点が取り出されました
「?」の個数によって一致させるデータを工夫できるので便利ですが、?に置き換わる文字がないデータには一致しないので注意しましょう。
例)「?ねこ」 ⇒ 「こねこ」には一致するが「ねこ」には一致しない
以上、Excel関数でのワイルドカードの使い方でした。
「*(半角アスタリスク)」と「?(半角クエスチョンマーク)」では定義が異なるので、
状況にあわせて使い分けてみてくださいね!