サイトについて      連絡先   検索

VBA セルを複数条件で検索する

はじめに

Excel VBA のセルを複数条件で検索する方法を紹介します。

セルの範囲をループして複数条件で検索できます。

セルを複数条件で検索する

Range の引数にセル名を指定するとセルの範囲を指定できます。

For Each に Range を指定すると範囲内の全てのセルを参照できます。

セル「A1」~「B2」を検索するには For Each c In Range("A1:B2") のように指定します。

Dim c As Range
For Each c In Range("A1:B2")
    Debug.Print (c.Address)
    ' $A$1
    ' $B$1
    ' $A$2
    ' $B$2
Next

セルの値が次のようになっているとします。

1

B 列が「ABC」で C 列が「あいう」の A 列の値を取得するには次のようにします。

Dim c As Range
For Each c In Range("B1:B4")
    ' 第一条件
    If c.Value <> "ABC" Then
        GoTo Continue
    End If
    ' 第二条件
    If c.Offset(0, 1).Value <> "あいう" Then ' Offset(0, 1) は C 列のセルを取得しています。
        GoTo Continue
    End If

    Dim aValue As String
    aValue = c.Offset(0, -1).Value
    Debug.Print(aValue)

Continue:
Next

このように列でループして If 文で条件を追加すれば、複数条件で検索ができます。

Offset は指定のセルからずれた位置のセルを取得できます。

セルの範囲を取得する方法は「セルを取得する」でいろいろと紹介しています。

セルに指定した文字が含まれているかどうかは「InStr 関数」でできます。

Like 演算子でワイルドカードを使用して判定もできます。

パターン 説明 使用例 一致例
?任意の 1 文字"あい?"あいう, あいか, あいも
*0 個以上の文字"*AB"AB, 0AB, 1AB
#任意の 1 桁 (0–9)##10, 22, 59
[charlist]charlist に含まれる任意の 1 文字[A-C]
[A, H, L]?
A, B, C
A1, H2, L3
[!charlist]charlist に含まれない任意の 1 文字[!A-C]
[!A, B, C]?
D, E, F
Dim b As Boolean
b = "あいうえお" Like "う*" ' "う" で始まるか
b = "あいうえお" Like "?い" ' "い" の前に一文字あるか
b = 12 Like "##" ' 2 桁の数字か
b = "AZZ" Like "[A-C]*" ' A ~ C の文字で始まるか
b = "AZZ" Like "[!A-C]*" ' A ~ C 以外の文字で始まるか
Debug.Print(b)

指定したシートのセルを検索する

Range.Find とコードに書くと、アクティブなシートのセルを検索します。これは ActiveSheet.Range.Find の ActiveSheet が省略されています。

' どちらも同じコード
Range("A1:B2").Find ("検索")
ActiveSheet.Range("A1:B2").Find ("検索")

シートを指定するには Sheets の引数にシート名またはインデックスを指定します。

1

Sheet1 のシートを指定するには、Sheets("Sheet1") か Sheets(1) と書きます。

' Sheet1 のセル「A1」~「B2」を検索
Sheets("Sheet1").Range("A1:B2").Find ("検索")
Sheets(1).Range("A1:B2").Find ("検索")

' Sheet2 のセル「A1」~「B2」を検索
Sheets("Sheet2").Range("A1:B2").Find ("検索")
Sheets(2).Range("A1:B2").Find ("検索")

関連ページ