「vba find whatの後をセルにしたい」
「find (what:=の後をセルの値で代入したい」
「vba findでwhatの検索条件をセル番号で指定」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
Excel VBA(Visual Basic for Applications)で、セルの検索を行うRangeオブジェクトのFindメソッドの、検索する文字列を指定する引数・Whatに、
セルに入力されているデータを利用するには、どのようなコードを書けばいいのかを探している方による検索です。
同じことを調べていた、より具体的な検索キーワードも見られます。
「エクセル マクロ find what部分 a1セルに入力されたもの」
というキーワードは、A1セルに入力された値を、
「find(what 選択したセル」
というキーワードは、選択されているセルの値を検索する方法を、探していらしたのでしょう。
変数を利用してセルの値で検索を行うサンプルマクロ
上記のような疑問を持つレベルの方の場合、最初は変数を使ったコードのほうが理解しやすいのではないかと思います。
以下のマクロを実行すると、アクティブセルに入力されているデータを、A列で検索して、みつかった場合には、データが存在する一つ目のセルのセル番地がメッセージボックスに表示されます。
Dim txt As String
Dim rng As Range
txt = ActiveCell.Value
Set rng = Range("A:A").Find(What:=txt)
If rng Is Nothing Then
MsgBox "見つかりませんでした。"
Else
MsgBox rng.Address(False, False)
End If
アクティブセルの値を変数・txtに代入しておいてから、
txt = ActiveCell.Value
Range.Findメソッドの引数・Whatに変数・txtを指定することで検索を行っています。
Set rng = Range("A:A").Find(What:=txt)
上記マクロの、
txt = ActiveCell.Value
の、Rangeオブジェクトを取得するオブジェクト式を変更して、例えば、
txt = Range("C1").Value
あるいは、
txt = Cells(1, 3).Value
としてやれば、C1セルに入力されているデータを、A列で検索することができます。
セルの値で検索を行うサンプルマクロ
変数への代入を行わないで、同じことを実行する場合、以下のようなマクロです。
Dim rng As Range
Set rng = Range("A:A").Find(What:=ActiveCell.Value)
If rng Is Nothing Then
MsgBox "見つかりませんでした。"
Else
MsgBox rng.Address(False, False)
End If
RangeオブジェクトのFindメソッドの引数・What部分に、先のマクロで変数への代入文の右辺に書いていたオブジェクト式を書けばOKです。
上記マクロの、
Set rng = Range("A:A").Find(What:=ActiveCell.Value)
の部分を例えば、
Set rng = Range("A:A").Find(What:=Range("C1").Value)
あるいは、
Set rng = Range("A:A").Find(What:=Cells(1, 3).Value)
としてやれば、C1セルに入力されているデータを検索してくれます。
- Newer:VBAでピボットテーブルをクリア・初期化する
- Older:VBAでピボットテーブルを選択する・アクティブにする
Home » Excel VBA Rangeオブジェクト » セル検索 » Findの検索条件・Whatにセルの値を指定するには