注目キーワード
  1. VBA
  2. 関数
  3. ショートカット

【VBA】Findメソッドで色々な方法を検索しよう【基本~応用】

  • 2019年3月30日
  • VBA
  • 133回
  • 0件
VBA NO IMAGE

Findメソッドを使っていますか?

FindメソッドはExcelの上で特定の文字列や数値などのを検索できるメソッドです。

この記事では

Findメソッドの基本的な使いかたから応用的な使いかたを解説していきます。

Findメソッドとは?

FindメソッドはExcelシート上のセル範囲の中で指定した値を含むセルを検索できるメソッドです。

Excelでの検索機能では見つかったセルを選択しますが、VBAのFindメソッドは

見つかった値を含むセルをRangeオブジェクトとして取得できるのでそのまま別の操作を実行することが可能です。

Findメソッドの基本的な記述方法は以下のようになります。

Sub test ()
Dim fRange As Range ’fRangeをオブジェクト型で宣言する
Set fRange = Cells . Find(What := “〇〇” , LookAt := xlPart) ’fRangeに〇〇を含むセルをセット
If Not fRange Is Nothing Then ’fRangeがNothingでない場合に処理を実行する
MsgBox fRange.Address ’〇〇を含んだセル参照をメッセージ画面に表示する
End If
End Sub

検索した値が見つかった場は、そのセルのRangeオブジェクトを返します。

また、検索した値が見つからなかった場合にはNothingを返します

Nothingが返された場合はオブジェクトのプロパティが存在しないため

エラーが起きるので記述する際には、Nothingでない場合に処理を実行するなど

Ifステートメントで条件を指定する必要があります。

引数Whatのみ必ず指定しますが、その他の引数は省略可能です。

細かい設定を指定する場合は以下の表の引数を使用します。

引数 定数 説明
What 検索するデータを指定
After 検索を開始するセルを指定
LookIn xlFormulas 検索対象を数式に指定
xlValues 検索対象を値に指定
xlComents 検索対象をコメント文に指定
LookAt xlPart 一部が一致するセルを検索
xlWhole 全部が一致するセルを検索
SearchOrder xlByRows 検索方向を列で指定
xlByColumns 検索方向を行で指定
SearchDirection xlNext 順方向で検索(デフォルトの設定)
xlPrevious 逆方向で検索
MatchCase True 大文字と小文字を区別
False 区別しない(デフォルトの設定)
MatchByte True 半角と全角を区別する
False 区別しない(デフォルトの設定)

「Findメソッド」で特定のデータ(値)を検索する

Findメソッドで特定のデータを検索する方法は、引数Whatに検索するデータを指定します。

また部分一致か、完全一致か指定するには、引数Lookatに定数xlPart(部分一致)か

定数xlWhole(完全一致)を設定します。

「Findメソッド」で空白また空白以外のセルを検索する

Findメソッドで空白のセルを検索するには引数Whatに(” ”)を指定します。

また、空白以外のセルを検索するには下記のコードにワイルドカードの(“*”)を指定して

任意の文字列を含むセルを検索します。

Sub test ()
Dim fRange As Range ’fRangeをオブジェクト型で宣言する
Set fRange = Cells . Find(What := (“”) , LookAt := xlPart) ’fRangeに空白のセルをセット
If Not fRange Is Nothing Then ’fRangeがNothingでない場合に処理を実行する
MsgBox fRange.Address ’空白セル参照をメッセージ画面に表示する
End If
End Sub

FindNextで複数一致

Findメソッドでは検索に当てはまる最初のセルをRangeオブジェクトとして取得しましたが、

検索条件に当てはまるセルが複数存在する場合はFindnextを使用します。

FindNextはFindで実行した検索(下記コードの3行目)を繰り返すメソッドです。

また、FindnextはDo~Loopで囲むことにより検索を繰り返すことができるようになります。

下記コードの7行目のFindnextの次の括弧内に指定したセルの次のセルから検索を再開するので、
前回検索にヒットしたセルを指定しています。

また、Findnextで複数の検索対象にヒットした後、検索対象の終点に達するとまた最初に戻って検索を開始します。

つまり、最初に検索対象にヒットしたセルに再び戻った場合は一通り検索を終えたという事なので

While文の条件で検索終了としています。

Sub test ()
Dim myRange As Range ‘検索にヒットしたセルを記録
Dim firstCell As Range ‘最初に検索にヒットしたセルを記録
Set myRange = Cells.Find(what:=”〇〇”) ‘最初のFindで“〇〇”という値を検索するように設定
If Not myRange Is Nothing Then ‘検索対象が1件以上ある場合に下記コードを実行’
Set firstCell = myRange
Do
Set myRange = Cells.FindNext(myRange) ‘()内のセルの次のセルから検索を続行’
MsgBox myRange.Row
Loop While myRange.Address <> firstCell.Address ‘最初のセルに戻るまでDo~Loopを継続’
End If
End Sub

まとめ

今回の記事では、Findメソッドについて紹介しました。

FindメソッドやFindNextメソッドは検索したデータのRangeオブジェクトを取得できるので

そのRangeオブジェクトに対して続けて処理をすることでプログラムの幅が広がります。

 

NO IMAGE
最新情報をチェックしよう!