Excel(エクセル)で文字列の一部で検索する、データベースの検索欄を作る方法/ワイルドカード(*、?)の使い方

IT

ワイルドカードとは、ポーカーでいうジョーカーのように「他のあらゆるカードに代替できる」ようなカードのことをいいます。これが転じて不特定の文字列を意味するIT用語となりました。
これを使い、GoogleやYahooの検索欄のようなデータベース用の「検索窓」を作ってみたいと思います。

Advertisements

ワイルドカードの使い方

wildcard1
とりあえず適当なデータベースを作りました。
wildcard2
頭に㈱がついた会社の数を数えてみたいと思います。
wildcard3
通常条件をつけて数を数えるにはCountIf関数を用いますが、=CountIf(A1:A5,”㈱”)では「A1~A5で「㈱」だけが入力されたデータの個数を求める」という意味になるので、数値は0になります。
wildcard4
ところがこの㈱のあとに*(アスタリク)を付けてみると……。
wildcard5
㈱+任意の文字列を条件にカウントされ、㈱から始まる会社の個数が判明しました。
こういう風に使えるのがワイルドカードです。””で囲む必要がある点に注意してください。*は文字数を問わず、何かしらの文字列を意味します。0文字も含みます。
wildcard6
少し式を変えて、B1に入力された文字から始まる会社の数をカウントしてみます。
式としては=CountIf(A1:A5,B1 & “*”)となります。
wildcard7
結果、たとえば㈲を打ちこんでも、その個数をカウントできるようになりました。
wildcard8
さらに検索欄を参照し、文字列の頭、終わりおよび、文中の一文字を参照できるようにします。
wildcard9
式は=CountIf(A1:A5,”*” & B1 & “*”)となります。つまり最初にワイルドカードを付けただけです。
wildcard10
これで「文字列のどこに打ちこんだ文字があっても」検索の対象とすることができるようになりました。
ここまでを要約すると、*康*で検索すれば徳川家も筒井孝も熙帝もひっかかる、という話です。
wildcard11
ワイルドカードには?というのもあり、これは任意の一文字を意味します。?ひとつで一文字、みっつで三文字です。
wildcard12
したがって=CountIf(A1:A5,”㈱???”)には、㈱Cエンタープライズは文字数が多すぎるので含まれません。
あとひとつあるんですが、とりあえず*と?を目的に応じて使い分けられるようになれば、Excelでよく使うワイルドカードはマスターしたと言えます。

ワイルドカードを使った検索窓の作成

wildcard13
では、本題に入ります。社名の一部を窓に打ちこむと、担当者、電話番号、正確な社名が表示されるという機能を実装したいと思います。
wildcard15
データベースの検索と関連項目の表示なので、VlookUp関数にワイルドカードを組み込んでいく形となります。
検索値をワイルドカードで挟み、=”担当者:”&VlookUp(“*”&D$2&”*”,A$2:C$1000,2,FALSE))のようにすれば、社名の一部の文字列で担当者が検索できます。使い回すので$付けて絶対参照にしてます。
*は空白の文字列も含むので、検索窓に何も打ちこんでない場合一番上のデータが表示されます。
wildcard16
何か打つと、ちゃんと関連した項目が表示されます。
wildcard17
関数を下にコピーしていき、最初の文字列と参照列を変更して、電話番号と社名も表示できるようにします。
wildcard18
もし検索窓が空白時は何も表示したくないのであれば、If文を使って=If(D2=””,””,”担当者:”&VlookUp(“*”&D$2&”*”,A$2:C$1000,2,FALSE))のように記述します。
wildcard19
何か打ちこむとちゃんと表示されます。
基本的なデータベースの検索窓としてはこれで十分だと思いますが、一度にひとつしか表示できない仕様なので、検索方法があやふやだったり、同じ社名がふたつあったりすると不具合が出ます。その場合はもう少し改良を加えていく必要があるかと思います。
やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント