ExcelVBA(マクロ)でセルを検索する方法/Findメソッドの使い方

little-boy IT

マクロを使っていくと、特定の値を検索してそれに干渉したり、条件に該当するセルだけを検索して変更したりといった操作が要求される場面が出てきます。そうした場合は、Findメソッドを使うことで対応可能な場合が多いです。

Advertisements

Findメソッドの使い方

条件に合うセルを検索し、その位置情報を取得
検索範囲.Find(検索内容)
find1
A列の数字のいずれかを選択した状態でマクロを実行すると、C列の同じ数字を検索し、色をつけるというマクロを組んでみたいと思います。
find2
Findメソッドを使う場合、一般的に①まず変数を作っておきます。As Rangeを付けるほうが正式ですが、なくても動きます。
find3
②その変数にSetを使って何か代入することを示した上で、
find4
③検索範囲を入力します。もし別のシートなら、Sheets(“シート名”).Range(範囲)のようにします。
find5
④最後に何を検索するかを指定します。
しかる後変数に対して何かアクションをします。
find6
今作ったDim FoundCell
Set FoundCell = Range(“C1:C14”).Find(ActiveCell.Value)
というコードを実行すると、たとえばA列で「5」を選んでいれば、
find7
ActiveCellの値である「5」と同じものがC列で検索され、最初に一致するC5セルが変数FoundCellに代入されます。
find8
で、そのFoundCellに対して色を変えるマクロを実行すると、
find9
FoundCell=Range(“C5”)なので、C5セルの色が変わります。

値が見つからない場合の処理

find10
上記のようなコードでもし値が見つからない場合、
find11
もっともらしいエラーが出ますが、要するに「指定した値がない」というエラーです。
find12
Findメソッドで検索値が見付けられない場合、「Nothing」という値が返されます。
なので、発見できない場合の処理としてIf FoundCell Is Nothing Thenを記述します。
検索値がNothingかどうかを判定する時は、「=」ではなく「Is」を使います(そういうルールです)。
find13
今回は見つからない場合何もしないことにして、そのままElseを置き、その下に色を変えるコードを置いて、End Ifで閉じます。
find14
これで検索値が見つからない場合何もせず、エラーも出ないマクロとなります。
' vba
Dim FoundCell
' ActiveCellの値をC1~14で検索
Set FoundCell = Range("C1:C14").Find(ActiveCell.Value)
If FoundCell Is Nothing Then' 一致しない場合
Else
' 検索して見付けたセルにアクション
FoundCell.Interior.ColorIndex = 20
End If
やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント