- ベストアンサー
Excelファイルのコピー・名前の変更
Windows XP SP2を使っています。 例えば、マクロ付Excelファイルが1つあるとします。 このファイルを40個コピーして、それらコピーされたファイルの名称を全て互いに異なる名称にしたいのですが、手作業で行う以外に簡単な方法はないでしょうか? 私が想像するに、コピーしたい40個のファイル名を、例えば、Excelファイルに保存しておいて、それを参照しながらコピー・名前の変更を行っていくことになるかと思うのですが、不勉強なため実現する手立てが分かりませんので、宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Copyするには、Excelの内部コマンドよりも、外部ですれば簡単に速く済むはずです。Shell という方法もないわけではないのですが、FileSystemObject を使ってみました。ファイルの大きさや受け手側のメディアにもよりますが、小さなものでしたら、一瞬で終了します。 マクロでコピーするために、ひとつのブックを使います。Sheet のA1 から、任意のファイル名をいれておきます。それは、#1さんと同じです。 Sub MultiCopyFiles() Dim objFso As Object Dim FNames As Variant Dim n As Variant '設定(コピー元のブック:このブックと同じフォルダであること) Const BASE_FILE As String = "Test1.xls" 'コピー先のフォルダ Const MYPATH As String = "E:\" '注意:末尾に "\"を入れること If Right$(MYPATH, 1) <> "\" Then MsgBox "末尾に「\」が入っていません。", vbCritical: Exit Sub If Dir(BASE_FILE) = "" Then MsgBox BASE_FILE & " が見つかりません", vbCritical: Exit Sub If Dir(MYPATH, vbDirectory) = "" Then MsgBox MYPATH & " が見つかりません", vbCritical: Exit Sub 'ファイル名を予め書いておきます。 FNames = Sheet1.Range("A1", Sheet1.Range("A65536").End(xlUp)).Value Set objFso = CreateObject("Scripting.FilesystemObject") For Each n In FNames If Not IsEmpty(n) Then objFso.Copyfile BASE_FILE, MYPATH & CStr(n) & ".xls" End If Next Set objFso = Nothing End Sub
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
burgess_shale様 こんばんは。Wendy02です。 >F5でマクロを実行させる。 えっ! (^^; それは、マクロの実行ではありませんけれども……。 マクロの実行は、Alt + F8 で、窓が出てきて、「MultiCopyFiles」という所をクリックします。後は、読んだ限りでは、問題ないようですね。 もう少し、がんばってみてくださいね。
補足
Wendy02さん、ご回答ありがとうございます。 早速Alt + F8で実行してみたのですが、 コピー元ファイルが見つかりません とのメッセージが出ました。 元ファイルの参照先が“マイドキュメント”となっていたことが原因のようで、何とか解決致しました。 本当に懇切丁寧なご回答に感謝致します。 ありがとうございました。
- mz80
- ベストアンサー率46% (13/28)
バッチファイルで処理できます。 cドライブの直下にaaaというフォルダーがあり、そのaaaフォルダーにb.xlsというexcelがあり、それをb1.xlsからb5.xlsという名前で5個コピーする場合 1.メモ帳を開きます。以下の内容を入力します。文字はすべて半角です。 for %%A in (1 2 3 4 5) do copy c:\aaa\b.txt a:\b%%A.xls 2.適当な場所にcpという名称で登録します。ここでは、aaaフォルダーに登録したことにします。 3.aaaフォルダーのcp.txtの名称をcp.batに変更します。このとき拡張子を変更してよいのかの旨メッセージが出ますがかまいません。 4.cp.batをダブルクリックして実行します。コマンドプロンプトンの画面が開き、バッチファイルが実行されます。 実際にこの方法でやる場合、1 2 3 4 5 の箇所は、名前を半角スペースで区切って、40個分入れてください。 また、実際のファイルの所在や出力先フォルダーは、もっと長くなります。できれば、上記のようにcドライブ直下に作業用としてaaa等の簡単な名称のフォルダーを作って作業されたほうがよいと思います。 ms-dosの時代のバッチファイルの事しか知らないのですが、名称にスペースは許されませんでしたので、名称にスペースはないほうがよいと思います。1行の長さにも制約がありました。40個分の名称が長くなるのであれば何回かに分けた処理にしてください。
お礼
mz80さん、ご回答ありがとうございます。 なるほど、バッチファイルという手もあるんですね。 しかしながら、今回考えているファイル名には全角が含まれているためにご回答頂いた内容では所期の目的を達成できないようでした。 また別の機会にご質問させて頂くかも知れませんので宜しくお願いします。
下記のような感じでいけると思います。 別のファイルを一つ作成し、A1のセルにコピー元となるファイル名を入力し A2セル以降に付けたいファイル名を入力しておきます。(.xlsは不要) 作成したファイルの標準モジュールに下記をセットし、実行。 下記の例では条件が2つあります。 (1)作成したファイルとコピー元のファイルの両方を開き、作成したファイル をアクティブにしておく必要があります。 (2)作成したファイルとコピーしたファイルは同一フォルダに存在する必要 があります。 Sub test() Dim k As Long For k = 2 To Range("A65536").End(xlUp).Row Workbooks(Cells(k - 1, 1).Value & ".xls").SaveAs Filename:= _ ActiveWorkbook.Path & "\" & Cells(k, 1).Value & ".xls" Next k Workbooks(Cells(k - 1, 1).Value & ".xls").Close End Sub
お礼
SuperMildさん、ご回答ありがとうございます。 やはりマクロになるのですね。 これまでにマクロを必要とする環境にいなかったものですから全く不慣れで試行錯誤を繰り返しています。 1年ほど前に、訳も分からず、マクロは、Alt + F11で開いて、標準モジュールの挿入でプログラムを編集し、Alt + Qで閉じる。更新する場合にはマクロを開いてF5を押す。言われるままにキィを叩いていただけ。この程度ではやったうちに入らないですね。 勉強させて頂きます。
補足
Wendy02さん、ご回答ありがとうございます。 ご回答頂いた通りにマクロを実行しようとしたのですが、目的とするところを達成できなかったので、私が実行した手順を具体的にご説明しながら再度ご質問させてください。 目的:C:\Documents and Settingsに保存されたコピー元ファイル『帳簿XXX-AA-BB-Ver.W(全).xls』を、例えば、3つコピーして、コピーされたファイルを各々以下のような名前に変更する。 『ちょうぼXYZ-AA-BB-Ver.W(手).xls』 『チョウボYZX-AA-BB-Ver.W(足).xls』 『朝暮ZZZ-AA-BB-Ver.W(鼻).xls』 ※変更したいのは、-AA-BB-Ver.W の前後です。 ・手順1 『Book.xls』をC:\Documents and Settingsに新規作成する。 ・手順2 Sheet1で、 セルA1に、『ちょうぼXYZ-AA-BB-Ver.W(手)』 セルA2に、『チョウボYZX-AA-BB-Ver.W(足)』 セルA3に、『朝暮ZZZ-AA-BB-Ver.W(鼻)』 と入力する(『』は入力しない)。 ・手順3 Alt + F11でマクロを編集するウィンドを開く。 ・手順4 ツールバー「挿入」→「標準モジュール」を選択 ・手順5 標準モジュールのシート(?)にご回答頂いたマクロを記述する。 但し、以下の箇所を変更する。 Const BASE_FILE As String = "帳簿XXX-AA-BB-Ver.W(全).xls" Const MYPATH As String = "C:\Documents and Settings\" '注意:末尾に "\"を入れること ・手順6 Alt + Qでマクロのシートを閉じる。 ・手順7 F5でマクロを実行させる。 こうすると、F5を押すと同時に“ジャンプ”というウィンドが現れて、“セル選択”というものを迫られるのですが、どう対処すればいいのか分かりません。 以上、大変長くなりましたが、上記の点について補足して頂ければ幸いです。