Excelで検索ボックスを作る方法!検索機能も実装!

Excelで検索ボックスを作る方法!検索機能も実装!
Excelで名簿から目的の人を探したいときはないでしょうか。

けど、そんな中で悩むことは、

・探すたびにCtrl+Fを開くのが手間
・オートフィルターで毎回絞り込むのが面倒
・何件ヒットしたのかがすぐに分からない

ですよね。

今回はそんなお悩みを解決する

・Excelで検索ボックスを作る方法(COUNTIF関数・条件付き書式・VBA)

についてまとめます!

完成イメージ

名簿から目的の人を探すとき、毎回Ctrl+Fを開いて検索するのは手間がかかります。
今回は
・セルに検索キーを入れるだけで、ヒット件数と該当行が分かる「検索ボックス」を作る方法
をゴールにします。
検索キーを入れるセルを1つ用意するだけで、件数の表示・該当行の強調・VBAでの一覧化までできるようになります。

完成イメージ
上の画像が完成形です。G2セルに「佐藤」と入力すると、ヒット件数が3件と表示され、該当する行が色で強調され、下部の結果エリアに該当行だけが一覧表示されます。

なお、該当行だけを目立たせる条件付き書式の考え方や、うまくいかないときの対処法(トラブルシュート)もあわせてご紹介します。

STEP1. 顧客名簿を用意する

まずは検索したい顧客名簿を用意します。
A列がNo、B列が氏名、C列がふりがな、D列が部署、E列が電話番号です。
1行目が見出しで、2行目以降がデータ、件数は12件です。
この名簿を元にして、いつでも使える検索ボックスを作っていきましょう。
検索前の顧客名簿

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。

No 氏名 ふりがな 部署 電話番号
1 佐藤 一郎 さとう いちろう 営業部 03-1234-0001
2 鈴木 花子 すずき はなこ 総務部 03-1234-0002
3 高橋 健 たかはし けん 営業部 03-1234-0003
4 田中 美咲 たなか みさき 経理部 03-1234-0004
5 佐藤 由美 さとう ゆみ 人事部 03-1234-0005
6 伊藤 大輔 いとう だいすけ 営業部 03-1234-0006
7 渡辺 さくら わたなべ さくら 総務部 03-1234-0007
8 山本 翔 やまもと しょう 営業部 03-1234-0008
9 中村 結衣 なかむら ゆい 経理部 03-1234-0009
10 佐藤 拓也 さとう たくや 営業部 03-1234-0010
11 加藤 麻衣 かとう まい 人事部 03-1234-0011
12 吉田 涼 よしだ りょう 営業部 03-1234-0012

※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。

STEP2. 検索キーを入れるセル(検索ボックス)を作る

名簿の右側に、検索ボックスを用意します。
まず G1セル に「検索キー」、G3セル に「ヒット件数」と入力します。
次に G2セル を選択し、薄い青色に塗っておきます。
G2セルが、これから検索キーを入力する「検索ボックス」になります。
見出しのG1・G3セルは太字にして背景色を付けると見やすくなります。
たったこれだけで、いつでも使える検索ボックスのできあがりです。
名簿の右に作った検索ボックス

STEP3. 検索キーを入力する

作った検索ボックス(G2セル)に、探したいキーを入力します。
ここでは例として 佐藤 と入力してみましょう。
G2セルをクリックして「佐藤」と入力し、Enterキーを押します。
この検索ボックスは、氏名(B列) を対象に検索する形にしていきます。
なお、この時点ではまだ件数表示も強調表示も出ていません。
次のSTEPで、ヒット件数を自動で表示させましょう。
検索キーに佐藤を入力した状態

STEP4. ヒットした件数をCOUNTIF関数で表示する

次に、検索キーに何件ヒットしたかを自動で表示させます。
G4セル に次の数式を入力します。

=COUNTIF(B2:B13,"*"&$G$2&"*")

COUNTIF関数は、範囲の中で条件に一致するセルの個数を数える関数です。
検索条件の “*”&$G$2&”*” は「G2セルの文字を含む」という意味になります。
前後にあるアスタリスク(*)は「0文字以上のどんな文字」を表すワイルドカードです。
前後に付けることで、部分一致の検索になるのがポイントですね。
COUNTIF関数の入力画面

STEP5. 該当する行を目立たせる

件数だけでなく、該当する行そのものを目立たせると分かりやすくなります。
上の画像は、佐藤さんに該当する3行(2・5・10行目)を色で強調した状態です。
この「該当行だけを色付けする」動きは、実際には 条件付き書式 で自動化できます。
画像では見た目が伝わるように、該当行を手で塗って再現しています。
設定の手順は、次のとおりです。

条件付き書式の設定手順

① 名簿の範囲 A2:E13 を選択します。
② ホーム タブ → 条件付き書式 → 新しいルール をクリックします。
③ 「数式を使用して、書式設定するセルを決定」を選びます。
④ 数式に =COUNTIF($B2,”*”&$G$2&”*”)>0 と入力します。
⑤ 「書式」から塗りつぶしの色(黄色など)を選んでOKします。
数式の $B2 は「B列を固定して行だけ動かす」という指定がポイントです。
これで、検索キーを変えるたびに、該当行の色が自動で切り替わります。
該当する行を色で強調した名簿

名前ボックスやCtrl+Fとの違い

ここで、よく使われる検索方法との違いを整理しておきましょう。
Ctrl+F は、その場でキーワードを検索して該当セルへ移動する機能です。
手軽ですが、探すたびに検索ウィンドウを開く必要があり、結果は残りません。
名前ボックス は、セル番地や名前を指定してジャンプする機能で、検索とは役割が違います。
一方、今回作った検索ボックスは、決まったセルにキーを入れるだけです。
件数・強調・一覧が常に同じ場所に表示されるので、繰り返し使う業務に向いています。
「毎回Ctrl+Fを開くのが手間」と感じるなら、検索ボックスの出番です。

4つの検索方法の比較

それぞれの方法の特徴を表にまとめました。
探し方や残したい形に合わせて選ぶと迷いません。

方法 仕組み 向いている場面 注意点
Ctrl+F その場でキーを検索して移動 1件をすぐ見つけたいとき 使うたびに操作が必要で、結果は残らない
オートフィルター 該当する行だけを表示 一時的に絞り込みたいとき 解除すると元に戻る。キーの入力場所がない
COUNTIF+条件付き書式 件数表示と該当行の色付け 常に見える検索ボックスがほしいとき 該当行を別エリアへ書き出すことはできない
VBAの検索ボックス 検索して別エリアに一覧化 定型の検索業務を自動化したいとき マクロ有効ブック(.xlsm)で保存が必要
POINT

「さっと確認したい」ならCOUNTIF+条件付き書式、
「該当データをコピーして使いたい」ならVBAの検索ボックスがおすすめです。
まずはCOUNTIFで件数を表示し、物足りなくなったらVBAにステップアップするとスムーズですよ。

STEP6. VBAで検索して結果を別エリアに一覧化する

件数と色だけでは、該当データをコピーして別の資料に使うことはできません。
そんなときは VBA で、検索結果を別エリアに一覧化しましょう。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。

Sub SearchBox()
    Dim key As String, lastRow As Long
    Dim r As Long, outRow As Long

    key = Range("G2").Value
    lastRow = Cells(Rows.Count, 2).End(xlUp).Row

    Range("A16:E16").Value = Array("No", "氏名", "ふりがな", "部署", "電話番号")
    outRow = 17

    For r = 2 To lastRow
        If InStr(1, Cells(r, 2).Value, key, vbTextCompare) > 0 Then
            Range("A" & outRow & ":E" & outRow).Value = _
                Range("A" & r & ":E" & r).Value
            outRow = outRow + 1
        End If
    Next r

    Range("G4").Value = outRow - 17
End Sub

これを実行すると、16行目の見出しの下に該当する行だけが上から順に並びます。
件数もG4セルに自動で入るので、検索ボックスと結果一覧が一度に完成します。
ボタンに登録しておけば、クリック1つで検索と一覧化が完了します。

オートフィルターを使う場合

VBAでは、オートフィルターで絞り込んでからコピーする方法もあります。

Range("A1:E13").AutoFilter Field:=2, Criteria1:="*" & key & "*"
Range("A2:E13").SpecialCells(xlCellTypeVisible).Copy Range("A17")

絞り込み結果をコピーするときは SpecialCells(xlCellTypeVisible) を使うのがポイントです。

タカヒロ

タカヒロ
InStrの最後にある vbTextCompare がミソです。
ここを vbBinaryCompare にすると、大文字と小文字を区別して検索してしまいます。
日本語の名簿なら vbTextCompare のままで問題ないので、そのまま使ってくださいね。


VBAで該当行を別エリアに一覧化した結果

うまくいかないときの対処法(トラブルシュート)

実際に試すと、思ったようにいかないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。

症状 原因 対処
検索しても何も出ない(0件) キーの前後に空白がある/全角と半角が混ざっている キー前後の空白を消す。全角と半角をどちらかに統一する
大文字と小文字が区別される(VBA) InStrの比較方法が区別ありになっている InStr(1, 文字列, キー, vbTextCompare) にする
1件しか出ない(VBA) ループの途中で Exit For して抜けている Exit For を外し、転記先の行番号を1件ごとに増やす
検索が遅い 1セルずつ検索している/画面更新が入っている Application.ScreenUpdating = False にする。AutoFilterでまとめて処理する
件数が合わない COUNTIFの範囲が名簿とずれている 範囲を B2:B13 のように最終行まで合わせる

関数の説明

今回使うCOUNTIF関数と、VBAのAutoFilter・Findの概要です。

COUNTIF関数(カウントイフ)

書式 =COUNTIF(範囲, 検索条件)
できること 範囲の中で、条件に一致するセルの個数を数えます。
戻り値 条件に一致したセルの個数(数値)
こんなときに 検索キーを含むデータが何件あるかを表示したいとき。
注意 “*”&セル&”*” で部分一致、セル参照だけなら完全一致になります。
=COUNTIF(B2:B13,"*"&$G$2&"*")

AutoFilterメソッド(オートフィルター)

書式 Range.AutoFilter Field:=列番号, Criteria1:=”条件”
できること 指定した列を条件で絞り込み、該当する行だけを表示します。
戻り値 なし(画面の絞り込み状態を変えます)
こんなときに VBAで該当行だけを表示し、まとめてコピーしたいとき。
注意 絞り込み結果のコピーには SpecialCells(xlCellTypeVisible) を使います。
Range("A1:E13").AutoFilter Field:=2, Criteria1:="*" & key & "*"

Findメソッド(検索)

書式 Range.Find(What:=検索値, LookIn:=xlValues, LookAt:=xlPart)
できること 条件に一致するセルを1つ見つけて返します。
戻り値 見つかったセル(Range)。なければ Nothing
こんなときに 該当するセルを1件ずつ処理したいとき。
注意 部分一致は LookAt:=xlPart、完全一致は LookAt:=xlWhole です。
Set hit = Range("B2:B13").Find(What:=key, LookAt:=xlPart)

完成

G2セルに「佐藤」と入力すると、ヒット件数が 3件 と表示されました。
該当する行は色で強調され、下部には該当行だけの一覧が並んでいます。
思ったとおりに動きましたか?
検索キーを「鈴木」に変えると1件だけになり、件数と一覧が自動で切り替わります。
検索ボックスを1つ作っておくだけで、名簿の調べものがぐっとラクになります。
検索ボックスの完成形

さいごに

いかがでしょうか。

今回は、

・Excelで検索ボックスを作る方法(COUNTIF関数・条件付き書式・VBA)

についてまとめました。

まずは今回のサンプル名簿で、ぜひ一度試してみてください。
さっと確認したいならCOUNTIFと条件付き書式、結果を一覧で残したいならVBAと使い分けてみてくださいね。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。

ぜひ試してみてください。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image