「range find 行番号を取得 nothing」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
Excel VBA(Visual Basic for Applications)のRange.Findメソッドを使って行番号を取得するコードをご紹介しています。
このコードにNothingキーワードを組み合わせるにはどうすればいいのかを探している方による検索でしょうか。
Range.Findでセルが見つからなかった場合のエラーを回避するサンプルマクロ
例えば、A列で「北海道」という文字列の入力されているセルを探して、その行番号をメッセージボックスに表示する、
MsgBox Range("A:A").Find("北海道").Row
というコードを実行したときに、該当するセルが存在しなかった場合、
「実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。」
という実行時エラーが発生します。
このエラーは、Is演算子とNothingキーワードを使って以下のようにすれば、回避することができます。
Dim rng As Range
Set rng = Range("A:A").Find("北海道")
If rng Is Nothing Then
MsgBox "みつかりませんでした。"
Else
MsgBox rng.Row
End If
上記のマクロの、
If rng Is Nothing Then
の部分が、該当するセルがあったかどうかを判定している部分です。
RangeオブジェクトのFindメソッドで、A列から「北海道」という文字列を探して見つかったセルを、オブジェクト変数・rngにセットしておきます。
Set rng = Range("A:A").Find("北海道")
見つからなかったかどうかを、Is演算子を使って、変数・rngがNothingであるかどうかを判定して、表示するメッセージを切り替えています。
If rng Is Nothing Then
MsgBox "みつかりませんでした。"
Else
MsgBox rng.Row
End If
Range.Findで該当セル見つからなかったときに何もしないサンプルマクロ
該当するセルが見つからなかったときに、何もしないのであれば以下のようなコードです。
Dim rng As Range
Set rng = Range("A:A").Find("北海道")
If Not (rng Is Nothing) Then
MsgBox rng.Row
End If
オブジェクト変数・rngがNothingではなかったときに、
If Not (rng Is Nothing) Then
行番号を取得してメッセージボックスに表示しています。
MsgBox rng.Row
Not演算子の使い方に慣れていないと
If Not (rng Is Nothing) Then
という二重否定的に戸惑うかもしれません。
Not演算子に慣れていない方は、Not演算子を使わなければ、
If rng Is Nothing Then
Else
MsgBox rng.Row
End If
と書けるということをまず理解して、それからNot演算子を使った判定の意味を考えてみてください。
Home » Excel VBA Rangeオブジェクト » セル検索 » FindメソッドでNothing判定を行ってエラーを回避する