つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

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