EnjomonWeb

Excel VBAの画像
2024/07/07

Excel VBA 検索窓にキーワードを入力しEnterキーで検索するフォームの作り方 | Intersect

仕事でVBAを使うことがあり、やりたいことはネットで調べていますが、VBA初心者の私が分かりづらかったものを、初心者でも分かるように説明したいと思います。

効率的なコードが書けていない可能性もありますので、予めご了承ください。

今回はEnterキーをトリガーとしてオートフィルターを起動し、羅列された情報の中からキーワードで検索するフォームの作り方を紹介します。

使用ケース

以下のような、情報を蓄積している一覧のエクセル、社内とかでよくありますよね。

このままでも毎回検索など行い、使えないことはないですが、利便性が悪いのでマクロを使用しもっと使いやすくしてみます。

完成イメージ

上記のエクセルに手を加えて、以下の仕様にします。

下準備

マクロの前に、下準備としてエクセルの表に少し手を加えます。

サンプルコード

標準モジュール

Sub フィルター()

  Range("A4:D4").AutoFilter Field:=4, Criteria1:="*" & Range("B2").Value & "*"
  ActiveWindow.ScrollRow = 1
  Range("B2").Select
   
End Sub

Sub フィルター解除()

  Range("B2").ClearContents
  ActiveSheet.ShowAllData
  ActiveWindow.ScrollRow = 1
   
End Sub


シートモジュール

マクロを該当シートのみの適用とするため、シートモジュールにもマクロを書いていきます。


Private Sub Worksheet_Change(ByVal Target As Range)
 
    If Intersect(Target, Range("B2")) Is Nothing Then
  Else
    Application.Run "フィルター"
  End If

End Sub

コード解説(標準モジュール)

まずは標準モジュールから解説していきますね。

フィルター設定

Range("A4:D4").AutoFilter Field:=4, Criteria1:="*" & Range("B2").Value & "*"

AutoFilterメソッドで、 下準備で行ったD列から、検索窓に入力された文字(Range("B2").Value)を検索しています。

*(アスタリスク)で囲むことで、ワイルドカードで検索させるようにします。

AutoFilterメソッド

Range(セル範囲).AutoFilter Field:=絞り込む列番号, Criteria1:=絞り込む文字列

隠れた行を表示

ActiveWindow.ScrollRow = 1

オートフィルタでの検索結果が複数行に渡る場合、一番下の行が表示され、上部が隠れてしまいます。

検索が完了したら、一番上の行が表示されるように、ActiveWindow.ScrollRowで1を設定します。

ここまでがフィルター設定の部分となり、続いてはフィルター解除部分です。

フィルター解除

  Range("B2").ClearContents
  ActiveSheet.ShowAllData
  ActiveWindow.ScrollRow = 1

解除部分は簡単なので、まとめて解説してしまいます。

①検索窓(B2)をクリア
②ActiveSheet.ShowAllDataでフィルタ全解除
③一番上の行を表示
という流れです。

コード解説(シートモジュール)

続いてシートモジュールの解説です。

Worksheet.Changeイベント

Private Sub Worksheet_Change(ByVal Target As Range)

Worksheet_Changeイベントを使うことで、コードを記載したシートのセルが変更されたときに処理を実行することができます。

Intersectメソッド

    If Intersect(Target, Range("B2")) Is Nothing Then
  Else

Intersectメソッド

Intersect(範囲1, 範囲2)

Intersectメソッドは、複数のセル範囲の重なっている部分のセル範囲を取得するApplicationのメソッドですが、前述のWorksheet.Changeイベントと組み合わせることによって、指定したセルに変更があった場合に処理を実行することができます。

今回のコードを訳すと、「B2のセル値が変更された場合に処理を実行」になります。

これによって検索窓に文字を入力しEnterを押すと、セルの値がブランクから〇〇に変更することによって、マクロが実行されるという仕組みです。

マクロ実行

Application.Run "フィルター"

別のプロシージャーのマクロを実行するために「Application.Run」を使用し、"フィルター"マクロを実行します。

以上、Enterキーでマクロを実行する検索フォームの作り方でした。

本格的な検索フォームを作ろうとするとデータベース化などが必要なのかもしれませんが、今あるものの利便性を簡単に上げるという手段として、選択するのもいいのかなと思います。

Excel VBAの画像

ユーザーフォームで入力内容確認画面の作り方

Excel VBAの画像

ユーザーフォームを使用した入力フォームの作り方

Excel VBAの画像

週ごとに縦に並んだ表を横並びにする方法 | Find&Set

Excel VBAの画像

セルに入力された日付を取得し自動でシートとファイルを作る方法

Excel VBAの画像

検索窓にキーワードを入力しEnterキーで検索するフォームの作り方 | Intersect

Excel VBAの画像

ブックを開いた時のウィンドウサイズを指定する方法 | workbook_open

Excel VBAの画像

新規ブックを作成しマクロが登録されたボタンを設置する方法 | OnAction

Excel VBAの画像

複数のワークシートをまとめて表示・非表示にする方法 | Visible Not.Visible

Excel VBAの画像

セル位置が変わっても特定の範囲を選択する方法 | Find&Address

Excel VBAの画像

電話番号からハイフンを削除し0から表示させる方法 | Evaluate&Replace

Excel VBAの画像

ダイアログボックスからファイルを選択して開く | GetOpenFilename

About

EnjomonWebは、「えんじょもん」である元転勤族の管理人が石川県金沢市から発信する、WEB制作情報をメインとした情報発信サイトです。

コーディング習得過程で検索してもすぐに解決しなかったことや、初心者には分かりづらい内容を分かりやすく説明することができるサイトを目指しています。

※「えんじょもん」とは金沢弁で「遠方の人、県外出身の人」という意味の方言。