テキストボックスの中を検索する|Excel VBA |
ワークシート内の文字列を検索するにはFindメソッドを使います。
次のコードは、アクティブシートから「モーグ」という文字を検索します。
Sub Sample1()
Dim FoundCell
Set FoundCell = Cells.Find("モーグ")
If FoundCell Is Nothing Then
MsgBox "見つかりませんでした"
Else
FoundCell.Activate
End If
End Sub
しかし、Findメソッドで検索できるのはセル内のデータだけです。
シート上に配置したテキストボックスの中を検索するには、どうしたらいいでしょう。
残念ながら、テキストボックスにはFindメソッドのような検索機能はありません。
しかし、テキストボックス内の文字列に、"ある文字列が含まれているかどうか" を調べることなら可能です。それには、InStr関数を使います。
InStr関数は、任意の文字列の中に、指定した文字列が含まれているかどうかを調べ、含まれている場合は、先頭から何文字目に存在するかを返します。含まれていなければ「0」を返します。
シート上に配置されているテキストボックスを順に調べて、テキストボックス内の文字列に、検索文字列が存在するかどうかをInStr関数で調べれば、結果的にテキストボックス内を検索することが可能です。
次のコードは、テキストボックス内で「モーグ」という文字列を検索し、見つかった場合は、そのテキストボックスを選択状態にします。
シート上に1つ以上のテキストボックスを配置してから実行してください。
Sub Sample1()
Dim i As Long
If ActiveSheet.Shapes.Count = 0 Then Exit Sub
For i = 1 To ActiveSheet.Shapes.Count
With ActiveSheet.Shapes(i)
If .Type = msoTextBox Then
If InStr(.TextFrame.Characters.Text, "モーグ") > 0 Then
.Select
Exit For
End If
End If
End With
Next i
End Sub
テキストボックスはShapeオブジェクトに属します。
Shapeオブジェクトにはテキストボックスだけでなく、直線やコメントや画像なども含まれまが、その区別はTypeプロパティを調べることで判定できます。
Shapeオブジェクトがテキストボックスだった場合、Typeプロパティは定数msoTextBoxを返します。
テキストボックス内の文字列は、TextFrame.Characters.Textとして参照します。
ここではテキストボックスを例にして検索する方法をご紹介しましたが、同じ考え方でコメント内を検索することもできます。