この記事では、VBAを使って特定の文字列が入力されたセルを検索し、該当するセル番地を取得する方法を実際のVBAコードも含めて説明します。
Excelには、オートフィルターという機能が存在しているように、データテーブル(表)の中から任意の文字列等を検索する機会は多いと思います。
VBAを使ってExcel業務の自動化を行うのであれば、セルの検索方法は、必須で習得しなければならないコードのひとつです。
セルの中から任意の文字列を検索し、該当するセル番地を取得する方法について、VBAコードを紹介しますので、ご参考になれば幸いです。
VBA│セルを検索する
この章では、ExcelのA列(A1からA7)に入力されている文字列の中から VBA という文字列を検索し、該当するセルのセル番地を取得するVBAコードを紹介します。セル番地は変数「r」に取得し、正確に取得していることを確認するため最後にメッセージボックスで表示する処理も加えています。
基本構文
Set r = object.Find(What:=)
r.Address
- Set r = 変数 r に検索文字を格納するステートメント
- object = 検索対象のセル範囲
この例では、A:Aです - Find(What:=) = 検索対象を指定するメソッド
この例では、VBAです - r.Address = 該当したセルのセル番地を取得するプロパティ
セル検索のVBAコード
Sub Sample()
・・・①
Dim r As Range
Set r = Range(“A:A”).Find(what : =”VBA”)
・・・②
If r Is Nothing Then
MsgBox “ありませんでした”
Else: MsgBox r.Address
End If
End Sub
①まず、変数rを宣言します。rは、セル番地を格納するための変数となりますので、Range型にしています。
次に、基本構文で紹介したように Set ステートメントを使ってA列全体から VBA という文字列を検索しています。
②Findメソッドは該当する文字列等が見つからなかった場合、Nothing という結果を返します。そのため、 Nothing が返ってきた場合の処理を、If構文で記述しています。このIf構文によって、見つからなかった場合のエラーを回避しています。
なお、Else:MsgBox r.Address の部分のAddressプロパティについて。Addressプロパティを省いてしまうと、メッセージボックスには、取得した文字列しか返されません。つまり、結果が「VBA」という文字列になってしまい、セル番地の取得ができないのです。
応用編:検索結果の右隣のセルを取得する
実業務において、Excelでセルを検索する場合には、該当するセルの右隣のセルを取得する必要があるケースは多いと思います。例えば、該当セルの右隣に日付が入力されている場合や性別など、何らかのステータスが入力されている場合などです。
この章では、前章で説明したセルの検索のVBAコードを応用して、検索結果の右隣のセルの情報やセル番地を取得するVBAコードを紹介します。
右隣のセルの情報を取得するためには、Nextプロパティ を使います。
右隣のセルの情報を取得する
Elseの行でNextプロパティを使っています。(Next.Value)
Sub Sample()
Dim r As Range
Set r = Range(“A:A”).Find(what : =”VBA”)
If r Is Nothing Then
MsgBox “ありませんでした”
Else: MsgBox r.Next.Value
End If
End Sub
<メッセージボックスの結果>
右隣のセル番地を取得する
Elseの行でNextプロパティを使っています。 (Next.Address)
Sub Sample()
Dim r As Range
Set r = Range(“A:A”).Find(what : =”VBA”)
If r Is Nothing Then
MsgBox “ありませんでした”
Else: MsgBox r.Next.Address
End If
End Sub
<メッセージボックスの結果>