【Excel VBA】図形(オートシェイプ)の文字列検索

当ページのリンクには広告が含まれている可能性があります。
図形文字列検索

こんにちは、ユーキです。

今回は、たくさんある図形(オートシェイプ)の中に書かれている文字列を検索する方法を紹介します。

目次

図形(オートシェイプ)の文字列検索

それでは早速、やってみましょう。

図形(オートシェイプ)の一覧を取得

まずは、図形(オートシェイプ)の一覧を取得します。取得には、SheetのShapesオブジェクトを使用します。Shapeオブジェクトのコレクションなので、ForEach文でループすれば、各図形(オートシェイプ)を取得することができます。

Dim sp As Variant
For Each sp In ActiveSheet.Shapes
    Debug.Print sp.Name
Next

図形(オートシェイプ)のテキストの取得

TextFrame2プロパティを使います。ただし、TextFrame2プロパティはExcel2007以降になるため、Excel2003まではTextFrameプロパティを使うことになります。

Excel2007以降の場合

TextFrame2プロパティを使います。

Dim sp As Variant
For Each sp In ActiveSheet.Shapes
    Debug.Print sp.TextFrame2.TextRange.Text
Next

上記のコードだと、線など文字列がない図形(オートシェイプ)があるとエラーになってしまうため、文字列があるかどうかの判定条件を追加しましょう。

文字列があるかどうかの判定には、TextFrame2.HasTextプロパティを使います。

Dim sp As Variant
For Each sp In ActiveSheet.Shapes
    If sp.TextFrame2.HasText Then
        Debug.Print sp.TextFrame2.TextRange.Text
    End If
Next

Excel2003までの場合

Excel2003だと、TextFrame2プロパティが使用できないため、TextFrameプロパティを使います。

Dim sp As Variant
For Each sp In ActiveSheet.Shapes
    Debug.Print sp.TextFrame.Characters.Text
Next

Charactersメソッドがない図形(オートシェイプ)もあるので、On Error Resume Nextで処理が中断することがないようにしておきます。エラートラップについては、【Excel VBA】エラートラップ をご覧ください。

文字列の検索

文字列の検索については、指定した文字列が含まれているかで判断をすることにします。使用するメソッドはInstrメソッドとなります。

Instrメソッドは、指定した文字列の中に、検索文字列が存在する場合、存在した位置を戻します。1以上の値が戻れば、指定した文字列が存在することになります。

Excel2007以降の場合

Dim sp As Variant
Dim seachKey As String
seachKey = "試験"
For Each sp In ActiveSheet.Shapes
    If sp.TextFrame2.HasText Then
        If InStr(sp.TextFrame2.TextRange.Text, seachKey) > 0 Then
            Debug.Print sp.Name
        End If
    End If
Next

Excel2003までの場合

Dim sp As Variant
Dim seachKey As String
seachKey = "TEST"
For Each sp In ActiveSheet.Shapes
    If InStr(sp.TextFrame.Characters.Text, seachKey) > 0 Then
        Debug.Print sp.Name
    End If
Next

まとめ

今回は、オートシェイプの文字列を検索する方法について述べました。

図形(オートシェイプ)の文字列検索
  • Sheet.Shapesオブジェクトでオブジェクトが取得できる
  • オートシェイプの文字列は、TextFrameまたはTextFrame2を使用する
  • 文字列検索は文字列が含まれているかと考えて、Instrメソッドを使用する

少しでもお役に立てば、幸いです。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次