あるフォルダの中にマクロを含んだ大量のエクセルブックが有ります。ソースの中身は全て一緒ですが特定の場所を変更する必要があります。変更すべきところは通常なら「置換」ですむような簡単な内容なのですがファイル数が300以上有ります。一つ一つファイルを開きVisual Basic Editorで修正するのは非常に手間です。楽に全てのソース内を変更する方法をご教授いただける方、よろしくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/06/15 22:24:39
  • 終了:2011/06/16 05:59:39

ベストアンサー

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/15 22:47:07

Excelのバージョンによってセキュリティのデフォルト設定などが違いますが、基本的には下記のような方法で置換は可能です

http://officetanaka.net/excel/vba/vbe/07.htm

複数ブックのマクロを置換する

Sub Sample3()
    Dim Target As Workbook, buf As String, VBC, i As Long
    Const Path As String = "C:\Tmp\"
    buf = Dir(Path & "*.xls")
    Do While buf <> ""
        Set Target = Workbooks.Open(Path & buf)
        With Target.VBProject.VBComponents("Module1").CodeModule
            For i = 1 To .CountOfLines
                If .Lines(i, 1) = "    Const StartDay As Date = #4/1/2006#" Then
                    .ReplaceLine i, "    Const StartDay As Date = #9/1/2007#"
                End If
            Next i
        End With
        Target.Save
        Target.Close
        buf = Dir()
    Loop
End Sub

※C:\Tmpフォルダにあるすべてのブックに対し、Module1内に記述されている「Const StartDay As Date = #4/1/2006#」をすべて「Const StartDay As Date = #9/1/2007#」に置換します。

id:hatmas

実験したところ成功しました!

そもそもVBAからVBA自身を操作という概念が私になかったためあやうく全てのファイルを手動で修正してしまうところでした。ご教授いただきありがとうございます。

2011/06/16 05:58:12

その他の回答(1件)

id:fonya3 No.1

fonya3回答回数238ベストアンサー獲得回数102011/06/15 22:36:53

異解ですが、修正後のマクロソースが入ったファイルを用意して、それに対象の300ほどのファイルからデータをVBAでコピー処理するという、逆説的な解決方法はいかがでしょうか?

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/15 22:47:07ここでベストアンサー

Excelのバージョンによってセキュリティのデフォルト設定などが違いますが、基本的には下記のような方法で置換は可能です

http://officetanaka.net/excel/vba/vbe/07.htm

複数ブックのマクロを置換する

Sub Sample3()
    Dim Target As Workbook, buf As String, VBC, i As Long
    Const Path As String = "C:\Tmp\"
    buf = Dir(Path & "*.xls")
    Do While buf <> ""
        Set Target = Workbooks.Open(Path & buf)
        With Target.VBProject.VBComponents("Module1").CodeModule
            For i = 1 To .CountOfLines
                If .Lines(i, 1) = "    Const StartDay As Date = #4/1/2006#" Then
                    .ReplaceLine i, "    Const StartDay As Date = #9/1/2007#"
                End If
            Next i
        End With
        Target.Save
        Target.Close
        buf = Dir()
    Loop
End Sub

※C:\Tmpフォルダにあるすべてのブックに対し、Module1内に記述されている「Const StartDay As Date = #4/1/2006#」をすべて「Const StartDay As Date = #9/1/2007#」に置換します。

id:hatmas

実験したところ成功しました!

そもそもVBAからVBA自身を操作という概念が私になかったためあやうく全てのファイルを手動で修正してしまうところでした。ご教授いただきありがとうございます。

2011/06/16 05:58:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません