- 公開日:
- 更新日:
エクセルのドロップダウンリストで頭文字で絞り込みする方法
この記事では、エクセルのドロップダウンリストで頭文字で絞り込みする方法をご紹介します。
頭文字で選択肢を絞り込めるように設定すると、スタッフ名を表に入力する際などに名前の頭文字で絞り込んで選択肢として表示させることができます。
数式についても詳細に解説していますので参考にしてみてください。
エクセルのドロップダウンリストで頭文字で絞り込みする方法
今回は名簿からスタッフ名を頭文字で絞り込んで、ドロップダウンリストの選択肢に表示する方法をご紹介します。
今回は上の画像のようなリストを作ってドロップダウンリストの絞り込みを行います。C列に名前、D列にふりがなを記載しておきましょう。C列のスタッフ名リストから頭文字で名前を絞り込んでA2セルのプルダウンに選択肢として表示するように設定します。画像右側のF列からH列のように3列の作業用の列を準備しておきましょう。プルダウンを設定するA2セルにあらかじめ任意の文字(例:ア)と入力しておきます。
まずはA2セルに入力した文字がD列のリストにあるかどうかを検索するための数式を入力します。F2セルに=IFERROR(SEARCH($A$2,LEFT(D2,1)),")と入力しEnterを押します。数式はD2セルの左から1文字目にA2セルと同じ文字があるかどうかを検索するという意味です。数式の詳細については下記「ドロップダウンリストを頭文字で絞り込むための数式について」セクションをご参照ください。
作成した数式をオートフィルでコピーします。F3セルの右下にあるフィルハンドルを下に向かってドラッグします。
次にG2セルに、IF関数とCOUNTIF関数を組み合わせてF列で検索した結果に番号をふるように設定します。F2セルを選択し、=IF(F2=",",COUNTIF($F$2:F2,"=1"))と入力します。数式はF列に1が入力されていたらそのセルの数をカウントするという意味です。数式の詳細については下記「ドロップダウンリストを頭文字で絞り込むための数式について」セクションをご参照ください。
作成した数式をオートフィルでコピーします。G3セルの右下にあるフィルハンドルを下に向かってドラッグします。
次にH列に、G列でカウントしたセルと同じ行にあるC列の名前を抽出する関数を入力します。H2セルを選択し、=IFERROR(INDEX(C:C,MATCH(ROW(C1),G:G,0)),")と入力しEnterを押します。数式はROW関数で示した数字がD列のどのセルにあるかを検索し、INDEX関数で同じ行番号の名前をC列から見つけて表示するという意味です。数式の詳細については下記「ドロップダウンリストを頭文字で絞り込むための数式について」セクションをご参照ください。
作成した数式をオートフィルでコピーします。H3セルの右下にあるフィルハンドルを下に向かってドラッグします。
次にA5セルにプルダウンを設定します。A5セル、データタブ、「データの入力規則」の順に設定します。
「データの入力規則」ダイアログボックスが表示されます。「入力値の種類」でリストを選択し、「元の値」に=OFFSET($H$2,,,COUNTIF($H:$H,"?*")-1)と入力します。数式はH列にあるリストから先頭の見出しを除いたものをプルダウンで表示するという意味です。数式の詳細については下記「ドロップダウンリストを頭文字で絞り込むための数式について」セクションをご参照ください。
エラー メッセージタブを選択して「無効なデータが入力されたらエラー メッセージを表示する」のチェックマークを外します。
次に、日本語入力タブ、「日本語入力」で全角カタカナの順に選択して、OKボタンを押します。
これで頭文字でドロップダウンリストの選択肢を絞り込むための設定が完了しました。プルダウンの右側にある三角ボタンを押して選択肢を確認すると最初に入力した文字(例:ア)で絞られた選択肢が表示されていることが分かります。
試しに他のカタカナを入力して頭文字で選択肢を絞り込んでみましょう。任意の文字(例:サ)を入力するとH列で抽出した項目がプルダウンの選択肢として反映されています。
ドロップダウンリストを頭文字で絞り込むための数式について
上記「エクセルのドロップダウンリストで頭文字で絞り込みする方法」セクションでご紹介している方法では、複数の関数を組み合わせた数式を使ってドロップダウンリストを頭文字で絞り込みする設定を行っています。
以下ではそれぞれの数式の詳細をご紹介します。数式をアレンジする際の参考にしてください。
上の画像はF2セルに入力した数式の解説です。
=IFERROR(SEARCH($A$2,LEFT(D2,1)),")
IFFERROR関数とSEARCH関数とLEFT関数を組み合わせて、D2セルの1文字目にA2セルに入力したものと同じ文字があるかを検索するという意味の数式を作成しています。
数式の中心になっているSEARCH関数は文字列の中から特定の文字を検索し、その文字列が最初に現れる位置を左端から数えるという関数で、書式は=SEARCH(検索文字列,対象,[開始位置])です。
検索文字列の引数が①、対象の引数をLEFT関数で指定しています。
LEFT関数は先頭から指定された文字数の文字を返す関数です。D2セルのふりがなから1文字目を検索するように、②でLEFT(D2,1)と設定しています。
③は1文字目という意味の「1」ですので数字を変更すれば2文字、3文字などに設定することもできます。
SEARCH関数とLEFT関数を組み合わせているため、D2セルのふりがなから1文字目を検索し該当する文字があれば何文字目にあるかをカウントする、つまり1文字目にあるため「1」を表示する、という数式になっています。
上の画像はG2セルに入力した数式の解説です。
=IF(F2=",",COUNTIF($F$2:F2,"=1"))
IF関数とCOUNTIF関数を組み合わせて、F列に表示された1をカウントするように設定してあります。
COUNTIF関数は指定した条件に該当する値が入ったセルを数える関数で、=COUNTIF(範囲,検索条件)です。
また、組み合わせてあるIF関数は条件ごとに返す結果を分けることができる関数で、書式は=IF(論理式,[値が真の場合],[値が偽の場合])です。
上の画像の①がIF関数の条件式、②がIF関数の偽の場合の引数になっています。
①はF列のセルに「1があるかどうか」という意味の論理式で、1がない場合は空白、1がある場合はセルの数を数える、という意味になっています。
上の画像はH2セルに入力した数式の解説です。
=IFERROR(INDEX(C:C,MATCH(ROW(C1),G:G,0)),")
IFERROR関数とINDEX関数、MATCH関数を組み合わせてカウントした数字と同じ行にあるスタッフ名を抽出するように設定しています。
中心になるのはINDEX関数です。INDEX関数は指定された行と列が交差する位置にあるセルを返す関数で、書式は=INDEX(配列,行番号,[列番号],[領域番号])です。
今回はINDEX関数の行番号②のように、行番号の引数にMATCH関数とROW関数が使われています。「MATCH(ROW(C1),G:G,0)」はG列の1行目から数えて「1」が最初に出てくるセルの行番号を数えるという意味になります。
またINDEX関数とも組み合わせているため、C列のスタッフ名のリストからG列で数字が入力されているセルと同じ行の名前を抽出できます。
上の画像は、A2セルのプルダウンの元の値に入力する数式の解説です。
=OFFSET($H$2,,,COUNTIF($H:$H,"?*")-1)
OFFSET関数でH列に抽出した項目をプルダウンの選択肢として表示するように設定しています。
OFFSET関数は指定したセル/セル範囲から指定された行数と列数分移動した位置にあるセル/セル範囲を返す関数で、書式は=OFFSET(参照,行数,列数,[高さ], [幅])です。
①が参照、②が高さの引数です。行数、列数、幅の引数は省略されています。
②の高さの引数は結果として返したい行数を指定します。COUNTIF関数を使って「H列の中で値が入力されているセル」の数を数えています。今回だと2つになりますが、「-1」を入力することで見出しの行を含めず「H2セルから3行分」という意味になります。
「?*」はワイルドカードと呼ばれる任意の文字列を記号で表したもので、?(クエスチョンマーク)は任意の1文字、*(アスタリスク)は0文字以上の任意の文字列という意味です。
「?*」は「1文字以上の任意の文字列」という意味で、1文字以上の文字列が入っているセルを数えるように設定してあります。