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 「のぐち」がないときは、「見つかりません」と、
それぞれ、メッセージボックスに表示します。2 「のぐち」がないときは、「見つかりません」と、
![](https://blogimg.goo.ne.jp/user_image/72/85/432e5057e677a57b6435337c8ca11417.jpg)
検索を実行した結果、該当ないときは「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 ■■■■
![](https://blogimg.goo.ne.jp/user_image/1f/88/100bd06d901e04ad321a22f00b401819.png)