Home » ExcelVBA Rangeオブジェクト » セル検索 » FindメソッドでNothing判定を行ってエラーを回避する

FindメソッドでNothing判定を行ってエラーを回避する

対象:Excel2007, Excel2010, Excel2013

Excel VBAのFindメソッドでNothing判定を行ってエラーを回避する

「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キーワードを使って以下のようにすれば、回避することができます。

Sub A列から北海道という文字列を探して行番号を取得する_エラー回避()

 Dim rng As Range

 Set rng = Range("A:A").Find("北海道")

 If rng Is Nothing Then
  MsgBox "みつかりませんでした。"
 Else
  MsgBox rng.Row
 End If

End Sub

上記のマクロの、
 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で該当セル見つからなかったときに何もしないサンプルマクロ

該当するセルが見つからなかったときに、何もしないのであれば以下のようなコードです。

Sub A列から北海道という文字列を探して行番号を取得する_Not()

 Dim rng As Range

 Set rng = Range("A:A").Find("北海道")

 If Not (rng Is Nothing) Then
  MsgBox rng.Row
 End If

End Sub

オブジェクト変数・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 » ExcelVBA Rangeオブジェクト » セル検索 » FindメソッドでNothing判定を行ってエラーを回避する

「セル検索」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.