「cells.find 戻り値」
「エクセル vba find 戻り」
「エクセル マクロ find 返値」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスが時折あります。
Excel VBA(Visual Basic for Applications)でセルを検索する際に利用する、RangeオブジェクトのFindメソッドの戻り値(返り値)が、何なのかを調べていた方による検索です。
Range.Findメソッドの戻り値はRangeオブジェクト
結論からいえば、オブジェクトブラウザーの詳細ペインに「As Range」と明示されているとおり、
Range.Findメソッドの戻りは、Rangeオブジェクトです。
オブジェクトブラウザーを使わなくても、ショートカットキー[Ctrl]+[I]を押すと表示されるクイックヒントでも、下図のようにRangeオブジェクトが返されることを確認できます。
(ただしクイックヒントは「.Find」の前のオブジェクト式によっては、表示されないケースもあります。)
Range.Findメソッドの戻りをTypeName関数で確認するサンプルマクロ
Range.Findメソッドに限らず、VBAではTypeName関数を使ってデータ種別を確認できることも、覚えておきましょう。
アクティブなワークシートの、いずれかのセルに「北海道」という文字列を入力しておいて、以下のSubプロシージャを実行してみてください。
Dim obj As Object Set obj = Cells.Find("北海道")
MsgBox TypeName(obj)
End Sub
「Dim obj As Object」と総称オブジェクト型で宣言されている、オブジェクト変数・objですが、Rangeオブジェクトであることを表す「Range」という文字列がメッセージボックスに表示されます。
Range.Findは、Rangeオブジェクトを返すメソッドで、その戻りが「Set obj = Cells.Find("北海道")」と、オブジェクト変数・objにセットされているからです。
ちなみに「北海道」と入力されているセルが存在しない場合は、MsgBoxには「Nothing」と表示されます。
これがFindメソッドで該当するセルが見つからなかった場合のエラー回避に使われるNothingです。
Range・Cells・ActiveCellもRangeオブジェクトを返すことを確認しましょう
RangeオブジェクトのFindメソッドを利用する方であれば、Rangeプロパティ・Cellsプロパティ・ActiveCellプロパティは既にご存知のはずです。
Range・Cells・ActiveCellプロパティも、Range.Findメソッドと同じく、Rangeオブジェクトを返すことも、あわせて確認しておきましょう。
Dim obj As Object
Set obj = Range("A1")
MsgBox TypeName(obj)
Set obj = Cells(1, 1)
MsgBox TypeName(obj)
MsgBox TypeName(obj)
End Sub
上記のプロシージャを実行すると、「Range」というメッセージボックスが3回表示されます。
Range・Cells・ActiveCellプロパティなどと同じように、RangeオブジェクトのFindメソッドもRangeオブジェクトを返すということを理解しましょう。
また、そもそもVBAからはRangeオブジェクトに用意されているプロパティやメソッドでセルを操作できることも、あらためてイメージしておきましょう。
Home » Excel VBA Rangeオブジェクト » セル検索 » Findメソッドの戻り値は?