エクセルのドロップダウンリストで入力候補を絞り込み表示させるあいまい検索に便利な方法をご紹介します。
ドロップダウンリストに予測候補を表示する完成イメージ
入力フォームの検索用セルに検索したい一部の文字を入力します。
入力された文字を含む検索候補が名称セルのドロップダウンリストに絞り込みされて表示されます。絞り込みする前は、20以上の候補から探す必要がありましたがあいまい検索で候補が絞り込まれて選択しやすくなっています。
予測候補を表示に必要なテーブルを準備
入力された文字から予測候補をドロップダウンリストに表示するには、2つのテーブルを用意する必要があります。
1つ目は、予測候補になるすべてを含むデータベース
2つ目が、入力された文字から検索候補を絞り込むリスト
この2つのテーブルで入力フォームに入力された文字が予測候補の一部を含む場合、ドロップダウンリストに予測候補(あいまい検索)として表示されるようになります。
入力に必要なフォームを作成
最初に入力するための入力フォームを作成します。
ここでは、「入力フォーム」という名前のシートを新規作成し、検索用と入力用のフォームをそれぞれ作成しています。
候補になる全てのデータベースを作成
予測候補となるすべてのデータをデータベースとして作成します。
ここでは、「電話帳」という名前のシートを新規作成し、警察署と消防署の電話帳データベースを作成しました。
A列に名称、B列に電話番号を入力しています。
名称と電話番号をすべて入力が終わったあと、C列に検索候補を判定するための数式を入力します。
=IF(ISERROR(FIND(入力フォーム!$B$4,A1)),””,ROW())
C列に入力した数式をデータの最終行までコピーします。
(C1のセル上で右下をCtrl+ダブルクリックでデータの入った最終行まで数式が一気にコピーされます。)
IF関数
IF(論理式,[真の場合],[偽の場合])
IF関数は論理関数のひとつで、もし~の場合〇〇する、~でない場合△△するといった論理式(条件)に対して真の場合(条件に合う場合)と偽の場合(条件に合わない場合)に真(TRUE)or偽(FALSE)を返す関数です。
ISERROR関数
ISERROR(テストの対象)
ISERROR関数は、テストの対象がエラーのときに真(TRUE)を返し、それ以外のときは偽(FALSE)の値を返す関数です。
ここでは、論理式にFIND関数で文字列が見つかった場合TRUEを返し、見つからなければFALSEを引数としています。
文字列が見つからない場合をエラー(真)として空白を表示、エラーでない場合(偽)ROW関数でセルの行番号を表示するようにしています。
FIND関数
FIND(検索文字列,対象)
FIND関数は、検索文字列が何文字目にあたるかを返す関数ですが、ここでは、指定した文字列が含まれるかを判定するために使用しています。
文字列がみつかれば何文字目かを返し、文字列が見つからなければエラーを返しています。
ROW関数
ROW()
ROW関数は、行番号を返します。引数はありません。
検索候補を絞り込むリストを作成
次に、検索候補を絞り込むためのリストを作成します。
ここでは、「検索候補」として新規シートを作成しています。
A列に候補を表示するための数式を入力します。
=INDEX(電話帳!A:A,SMALL(電話帳!C:C,ROW(A1)),1)
ここでは、最大23行目まで表示されるようにA23まで数式をコピーしています。
INDEX関数
INDEX(参照,行番号,[列番号])
INDEX関数は、指定した行番号と列番号が交差する位置にある値またはセルの参照を返します。
SMALL関数
SMALL(配列,順位)
データの中から昇順の順位の値を返します。ここでは、ROW関数で取得した行番号の値を順位としています。
名前の定義を作成
検索候補リストに名前の定義で範囲指定して名前をつけておきます。今回は、「検索候補」と名前をつけました。参照範囲にOFFSETを利用して可変式リストにしています。
入力用フォームに入力規則を指定
入力用フォームのシートに戻り、名称を入力するB7セルにデータの入力規則のリストを適用します。
ここでは、入力規則の元の値に先ほど名前の定義で作成した「検索候補」を指定しています。
次に、電話番号を入力するC7セルにはINDEXとMATCH関数を利用して電話帳から参照しています。
=IFERROR(INDEX(電話帳!B:B,MATCH($B$7,電話帳!A:A,0)),””)
以上で完成です。
検索用B4セルに検索したい文字を入力してドロップダウンリストにB4セルの文字を含む検索候補が絞り込みされて表示されているはずです。