- ベストアンサー
【大至急】excel2003 VBAマクロの質問
- excel2003でのVBAマクロを作成し、サブフォルダ配下にフォルダ名_test.xlsというファイルを作成する方法を教えてください。
- マクロ.xlsを自分のファイルパスを検索し、同じフォルダのサブフォルダにtemplate.xlsからコピーしてフォルダ名_test.xlsファイルを作成します。
- 既にフォルダ名_test.xlsファイルが存在する場合は作成せず、次のフォルダに進みます。フォルダがなくなるまで繰り返します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
え~と、どうしても Excel マクロでなくては駄目ですか? バッチファイルで簡単に出来ちゃったんですが…… @echo off for /d %%d in (*) do ( if not exist %%d\%%d_test.xls copy template.xls %%d\%%d_test.xls )
その他の回答 (1)
- temtecomai2
- ベストアンサー率61% (656/1071)
※ コードがインデントしてる部分は全角スペースを使っているのでコピペするなら半角スペースに置き換えること。 ※ Excel 2007 で作ったので適宜 Excel 2003 用に直すこと。(たぶん拡張子ぐらい) VBA でやりたいのなら FileSystemObject を使う。 参照設定で Microsoft Scripting Runtime を取り込む。 Sub test1() Const prefix As String = "_test.xlsx" ' コピー時につける名前の固定部分 Const template As String = "template.xlsx" ' テンプレートのファイル名 Dim fso As New Scripting.FileSystemObject Dim root As Scripting.Folder Set root = fso.GetFolder(ThisWorkbook.Path) ' 起点のフォルダ Dim subf As Scripting.Folder For Each subf In root.SubFolders ' 起点フォルダのサブ フォルダをループ Dim newFileName As String newFileName = subf.Name & prefix ' コピー時につける新しいファイル名 ' 上記新しい名前に合致するファイルが存在しなければ、テンプレートファイルをコピー If Not fso.FileExists(fso.BuildPath(subf.Path, newFileName)) Then fso.CopyFile fso.BuildPath(root.Path, template), fso.BuildPath(subf.Path, newFileName) End If Next End Sub
お礼
ご回答ありがとうございます! 今回の用途では、急ぎだった為hitomuraさんのバッチファイルでも非常に助かりましたが、他にも今回と似たような処理をしたいものがいくつかありまして、temtecomai2さんがご教示してくださいましたものは部分的に改変して別の形で活かせそうです! 特に、VBAだと標準モジュールとしても使えるのでご提示いただいたものは 非常に参考になるものですので、すごくありがたいです! ありがとうございました
お礼
ご回答ありがとうございます! バッチファイルで処理するという発想がなかったので、VBAで質問しましたが 今回の急ぎで必要な処理に対して大変助かりました! 次からバッチの基礎も勉強してどちらで質問すればよいか考えて質問します! ありがとうございました