2007年6月15日金曜日

エクセルでオートシェイプの文字を置換する。

最近、仕事でエクセルVBAを利用することが多いなぁ。
つうことで、まず最初に、仕事でER図を作成する必要がでてきて
ツールを色々探していたら、ベクターにエクセルで作成する
フリーのものがあった。ExcelERDです。
いや本当すばらすい。リバースエンジニアで一発楽々って感じ!!
これをフリーで配布してるんですから、まさに
とここまではよかったのですが、データ型が汎用的になってる
ので、オラクルのデータ型とズレが生じてしまいました。
データ型はある程度までは変更できるみたいですが、
Varchar2なんかは変換されず、Charになっていました。
変換されずというかなり語弊がありますね・・・。
そこで、これを一括して変換しようと思い、
今度はオートシェイプの文字を置換してくれるフリーのツールを探したのですが
これが探し方が下手なのか、なかなか見つからずシェアウエアしかなかった。
しかも、結構な値段。
じゃあ、上記のソフトに見習って作るかということでやってみました。


Sub Macro1()

Dim tbox As Object
Dim findStr As String
Dim replaceStr As String
Dim count As Long
Dim i As Long
Dim myDocument As Worksheet

findStr = InputBox("置換対象文字列")
replaceStr = InputBox("置換文字")

Set myDocument = Worksheets(1)

myDocument.Shapes.SelectAll

For i = 1 To myDocument.Shapes.count
myDocument.Shapes(i).Select
'グループ化されていたら解除して検索
If myDocument.Shapes(i).Type = msoGroup Then
Selection.ShapeRange.Ungroup.Select
For Each tbox In Selection
If TypeName(tbox) = "TextBox" Then
tbox.Text = Replace(tbox.Text, findStr, replaceStr)
End If
Next
Selection.ShapeRange.Regroup.Select
Else
If myDocument.Shapes(i).Type = msoTextBox Then
Selection.Characters.Text = Replace(Selection.Characters.Text, findStr, replaceStr)
End If
End If
Next

End Sub

ちなみに、見ていただいたらわかるとおり
かなりその場しのぎで作成したマクロなので改良の余地が存分にあります。
あとはお好きなように煮るなり焼くなりしてください。
ちなみにエクセル2000と2003で動作確認してます。

0 件のコメント: