残業を減らす!Officeテクニック

名称とIDを同じセルに入れたExcelの表を渡された! 「*」を使った数式で一時しのぎ

「*」は数式内であいまい検索したい場合にも使える

 Excelで作られた表の中には、見た目を優先した結果、検索や抽出といった処理がしにくい構造になっているものがあります。例えば以下のような表です。特定の文字列を検索することはできますが、例えば「SEIT」から始まるセミナーは何件あるか? といった時に困ります。

セミナー名とセミナーIDが1つのセルに入力されており、データベースとして整えられていない

 表の形式が良くないのはもちろんですが、実務では今すぐ処理したいことがありますよね。今回は、あいまい検索を実現する“ワイルドカード”の「*」(アスタリスク)について振り返ってみましょう。

ワイルドカードを利用して置換する

 上記のような表からIDだけを取り出したいことはよくあります。FIND / LEFT / MID関数やTEXTSPLIT関数を使ってIDだけ取り出す方法、[Ctrl]+[E]キーを押してフラッシュフィルを利用する方法もありますが、単純に[検索と置換]ダイアログボックスで“ワイルドカード”を使う方法もおすすめです。

 「*」は任意の文字列を意味するワイルドカードです。1文字を意味する「?」とセットで使うこともあります。

 「*(」は、『任意の文字列+「(」』という意味となり、IDだけ残す場合は「*(」を空白で置換することで、「(」より前の文字列をすべて削除できます。作業用の列にデータをコピーして処理してみましょう。

作業列としてA列を挿入してB列の内容を貼り付けてある。セル範囲を選択して[Ctrl]+[H]キーを押す
[検索する文字列]に「*(」と入力して[すべて置換]をクリックする
置換された件数が表示される。[OK]をクリックする
「(」より前の文字列がすべて削除された。続けて[検索する文字列]に「)」と入力して[すべて置換]をクリックする。置換した件数が表示されるので[OK]をクリックしておく
ID以外の文字列を削除できた

 セミナー名だけ残したい場合は「(」より後ろの文字列をすべて置換。つまり[検索する文字列]に「(*」と入力して空白で置換すれば削除できます。

セミナー名だけ残したい場合は[検索する文字列]に「(*」と入力して[すべて置換]をクリックする

COUNTIFS関数とワイルドカードでカウントする

 現状の表を整形せずに処理したいこともあるでしょう。例えば、IDに「SEIT」を含むデータを数えたいときは? 条件付きでデータを数える関数として、COUNTIF / COUNTIFS関数の利用を思いつくでしょう。

検索条件としてセルG2に「SEIT」と入力してある。セルH2に「=COUNTIF(A:A,G2)」と入力したが一致するデータはない

 単純に「SEIT」という文字列を検索条件としても一致するデータはありません。検索すべきは「(任意の文字列)+ セルG2の値 +(任意の文字列)」です。ワイルドカードで表現すると「"*" & G2 & "*"」となります。「*」は文字列なので半角の「"」で囲み、文字列を連結する「&」演算子でつなげるだけです。

セルH2の数式を「=COUNTIF(A:A,"*" & G2 & "*")」と修正したところ、結果は7件となった

XLOOKUP関数とワイルドカードで検索する

 XLOOKUP関数でワイルドカードを利用する場合は、検索値にワイルドカードを含めたうえで、5つ目の引数[一致モード]に[ワイルドカード文字との一致]を指定することがポイントです。

引数[検索値]にワイルドカードを指定しただけでは「#N/A」エラーになってしまう。「*」がワイルドカードとして認識されないためだ
5つ目の引数[一致モード]に[ワイルドカード文字との一致]を指定する。「2」と直接入力しても構わない
ワイルドカードが有効になり、「(任意の文字列)+ セルG2の値 +(任意の文字列)」の条件で一致するデータが表示された

 表の整形が難しい状況でも、ワイルドカードを活用すれば、検索や集計、置換といった作業を効率化できます。XLOOKUP関数でワイルドカードを利用した際に「#N/A」エラーで困ったら、5つ目の引数[一致モード]を思い出してください。