目次
コード
以下のような関数(サブプロシージャ)を準備する。
標準モジュール(Module1)
Option Explicit Public Sub SearchInAutoShapes(ByRef x_shapes As Object) Dim p_shape As Object For Each p_shape In x_shapes ' グループ化された図形の場合 If p_shape.Type = MsoShapeType.msoGroup Then ' 再帰呼び出し SearchInAutoShapes p_shape.GroupItems {em:comment{' グループ化されていない場合 Else ' テキストがある場合 If p_shape.TextFrame2.HasText Then Dim p_textRange As Office.TextRange2 Set p_textRange = p_shape.TextFrame2.TextRange Dim p_textInShape As String p_textInShape = p_textRange.Text MsgBox p_textInShape If p_textInShape = "たちつてと" Then p_shape.Select End If End If End If Next p_shape End Sub
呼び出し側
Sheet1
Option Explicit Private Sub CommandButton1_Click() Dim p_sheet As Worksheet Set p_sheet = ActiveWorkbook.ActiveSheet SearchInAutoShapes p_sheet.Shapes End Sub
解説
SearchInAutoShapes
には、ワークシートのShapes
を渡します(そのシート中の全オートシェイプのコレクション)。- オートシェイプがグループ化されていた場合、自分自身を再帰呼び出しして探しています。
- グループじゃないオートシェイプが特定できたら、
.TextFrame2
プロパティでTextFrame
を取得してきて、.HasText
プロパティでテキストを持っているか調べます。 - テキストを持っていたら、
TextFrame
の.TextRange
プロパティでTextRange
を取得してきます。 TextRange
の.Text
プロパティから取得できるのが、そのオートシェイプ中の文字列です。- 上の例では、オートシェイプ内に
"たちつてと"
という文字列があったら、そのオートシェイプを選択しています。