[Excel VBA] シート内の全てのシェイプに対してテキスト置換えをする
Excelの検索/置換機能はとても便利ですが、シェイプに対しては機能しません。
そのため、シェイプを多用して、テキスト配置を行っている場合、文字列の置換えはかなり面倒なことになります。
というわけで、シート内の全てのシェイプに対して文字列を置換えするマクロを作りました。
基本的にはShapes内をループすればよいのですが、Excelにはグループという機能があります。
Shapesだけだと、グループ内に含まれるシェイプが対象になりませんので、再起処理でグループの中の中まで検索しにいきます。
Public Sub ReplaceAllShapeText(searchText As String, replaceText As String)
Dim sh As Worksheet
Dim sp As Shape
Set sh = Application.ActiveSheet
For Each sp In sh.Shapes
ReplaceShapeText sp, searchText, replaceText
Next
Set sh = Nothing
End Sub
Sub ReplaceShapeText(sp As Shape, searchText As String, replaceText As String)
On Error Resume Next
Dim sp2 As Shape
Dim t As String
If sp.Type = msoGroup Then
For Each sp2 In sp.GroupItems
ReplaceShapeText sp2, searchText, replaceText
Next
Else
t = sp.TextFrame.Characters.Text
'矢印などテキスト設定できないシェイプの場合はエラーになる
If Err Then
Call Err.Clear
Else
sp.TextFrame.Characters.Text = Replace(t, searchText, replaceText)
End If
End If
End Sub
実際に実行する際には、
Sub Test()
ReplaceAllShapeText "検索文字", "置換文字"
End Sub
のようなマクロを実行すればOKです。
このシェイプに対する再起処理ループの仕組みはほかにもいろいろ使えそうです。
応用すればもっと便利なこともできそうなので、ぜひお試しを。
== ランキングに参加しています。ぜひクリックお願いします ==
[VBA] イミディエイトウィンドウが表示されなくなったとき [Excel] セルの書式設定を使いこなす!
VBAを書かなくても、アドインを使えば、シート内の全てのシェイプに対してテキスト置換えができます。
コメントありがとうございます。
シェイプに対するテキスト置き換えはアドインでいくつか提供されてますね。
標準であればいいのにと思います。