HOME > 即効テクニック > Excel VBA > 関数関連のテクニック > テキストボックスの中を検索する

テキストボックスの中を検索する|Excel VBA

関数関連のテクニック

テキストボックスの中を検索する

(Excel 97/2000/2002/2003/2007/2010/2013/2016)

ワークシート内の文字列を検索するには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として参照します。

ここではテキストボックスを例にして検索する方法をご紹介しましたが、同じ考え方でコメント内を検索することもできます。