find関数
にメンテナンス済み
Excel 関数だけでは解決することの難しいデータ処理を行う際に、VBA(Visual Basic for Applications)を使用することが有用です。
その中でもFind
メソッドは、特定の値をシート内で検索するための非常に便利な機能です。
本記事では、VBA のFind
メソッドの基本的な使い方から、実際の業務で役立つ応用例までを詳しく解説します。
Find メソッドの基本
Find
メソッドは、Range
オブジェクトに対して特定の値を検索するためのメソッドです。
Find メソッドの基本的な構文
まずは、Find
メソッドの基本的な構文を見ていきましょう。
Find関数の構文
RangeObject.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
- What: 検索する値を指定します。
- After: 検索を開始するセルを指定します。省略可能です。
- LookIn: 検索対象(値、数式、コメントなど)を指定します。
- LookAt: 完全一致か部分一致かを指定します。
- SearchOrder: 行単位か列単位かを指定します。
- SearchDirection: 検索方向(次を検索か前を検索か)を指定します。
- MatchCase: 大文字小文字を区別するかどうかを指定します。
- MatchByte: 全角と半角を区別するかどうかを指定します。
- SearchFormat: 検索するセルの書式を指定します(Excel 2007 以降)。
基本的な検索の例
次に、基本的な検索の例を見てみましょう。
Sub BasicFindExample()
Dim ws As Worksheet
Dim result As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
Set result = ws.Cells.Find(What:="検索する値")
If Not result Is Nothing Then
MsgBox "値が見つかりました: " & result.Address
Else
MsgBox "値が見つかりませんでした"
End If
End Sub
前述した通り、Find
メソッドはRange
オブジェクトに対して検索を行うため、Cells
プロパティを使ってシート内のセル全てを対象に検索を行います。
Find
メソッドは、検索結果が見つかった場合はそのセルを返し、見つからなかった場合はNothing
を返します。
応用的な使い方
複数条件での検索
Find
メソッドを使って複数条件で検索する方法について説明します。
Sub FindWithMultipleConditions()
Dim ws As Worksheet
Dim firstResult As Range
Dim result As Range
Dim searchVal1 As String, searchVal2 As String
Set ws = ThisWorkbook.Sheets("Sheet1")
searchVal1 = "条件1"
searchVal2 = "条件2"
Set firstResult = ws.Cells.Find(What:=searchVal1)
If Not firstResult Is Nothing Then
Set result = firstResult
Do
If ws.Cells(result.Row, result.Column + 1).Value = searchVal2 Then
MsgBox "条件に一致しました: " & result.Address
Exit Sub
End If
Set result = ws.Cells.FindNext(result)
Loop While Not result Is Nothing And result.Address <> firstResult.Address
End If
MsgBox "条件に一致する値は見つかりませんでした"
End Sub
検索結果をリスト形式で取得
検索結果をリスト形式で取得し、別のシートに出力する方法をご紹介します。
Sub FindResultsToList()
Dim ws As Worksheet
Dim result As Range
Dim searchValue As String
Dim outputWs As Worksheet
Dim outputRow As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
Set outputWs = ThisWorkbook.Sheets.Add(After:=ws)
searchValue = "検索する値"
outputRow = 1
Set result = ws.Cells.Find(What:=searchValue)
If Not result Is Nothing Then
Do
outputWs.Cells(outputRow, 1).Value = result.Address
outputRow = outputRow + 1
Set result = ws.Cells.FindNext(result)
Loop While Not result Is Nothing And result.Address <> outputWs.Cells(1, 1).Value
Else
MsgBox "値が見つかりませんでした"
End If
End Sub
エラーハンドリング
検索が失敗した場合の対処
検索が失敗した場合、つまり値が見つからなかった場合のエラーハンドリングについて説明します。
Sub FindWithErrorHandling()
Dim ws As Worksheet
Dim result As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
On Error Resume Next ' エラーが発生してもプログラムを続行する
Set result = ws.Cells.Find(What:="検索する値")
On Error GoTo 0 ' エラーの無視を終了
If Not result Is Nothing Then
MsgBox "値が見つかりました: " & result.Address
Else
MsgBox "値が見つかりませんでした"
End If
End Sub
複数のエラーチェックポイント
複数のエラーチェックポイントを設定する方法について説明します。
Sub AdvancedErrorHandling()
Dim ws As Worksheet
Dim result As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
On Error GoTo ErrHandler ' エラーが発生した場合にErrHandlerにジャンプ
Set result = ws.Cells.Find(What:="検索する値")
If result Is Nothing Then
Err.Raise vbObjectError + 513, , "値が見つかりませんでした"
End If
MsgBox "値が見つかりました: " & result.Address
Exit Sub
ErrHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
おわりに
VBA のFind
メソッドは、Excel シート内で特定のデータを検索する際に非常に便利です。
本記事で紹介した基本的な使い方から応用例を活用して、業務の効率を大幅に向上させることができます。
これらのテクニックを駆使して、より高度な Excel 操作を可能にしてください。
#vba
#find
#検索
#メソッド