パソコン悪戦苦闘記録

Excel検索に引っかからなければNothing

 昨日、Excelマクロの「Find」の記事を書きました。

 Excelマクロ VBA の「Find」は、検索を実行するメソッドです。
   こちらの記事をご覧ください。


Findの使用例は、次のようなものです。

Sub Kensaku()
Dim myR As Range, myTxt As String
Set myR = Range(Cells(2, 3), Cells(7, 3)).Find("のぐち*")
If myR Is Nothing Then
  MsgBox "見つかりません"
Else
  myTxt = myR.Offset(0, -1).Value
  MsgBox myTxt
End If
End Sub


 上記マクロを実行すると、
C列の2行目から7行目の間を検索し、
1 「のぐち」から始まるセルがあれば、その左隣のセルのデータを、
2 「のぐち」がないときは、「見つかりません」と、
それぞれ、メッセージボックスに表示します。





 検索を実行した結果、該当ないときは「Nothing」となるので、このことをしっかり覚えておきましょう。
 「Nothing」は、
オブジェクト変数に何も入っていない状態
オブジェクト変数が何のオブジェクトも参照していない状態
のことです。
 つまり、オブジェクト変数が空っぽの状態にあることです。

 ここで、もう一つ、注意すべき重要なことがあります。

   If myR Is Nothing 
とすべきところを、
   If myR = Nothing 
とするのは、間違いということです。

 「If myR = Nothing」で、一見よさそうに見えます。
 ですが、これではエラーが出ます。
 このミスは、本当、よくやるミスです。意識していないと、ベテランでもやってしまいがちなミスです。ついうっかりと。

 「=」は、左辺と右辺の数や文字列が同じかどうか比較する演算子です。
 一方で、「Is」は、同一のオブジェクトかどうかを判定する演算子です。これを使うと、左辺のオブジェクト変数と右辺のオブジェクト変数が、同一のオブジェクトを参照しているかどうか判定されます。

 ですから、If myR = Nothing とするのは間違いで、
If myR Is Nothing と書くべきなのです。

 myR(オブジェクト変数) Is Nothing と書くことで、myR が空っぽかどうか判定できます。




それでは、また次の記事で
goosyun
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事