- ベストアンサー
EXCEL VBAでファイル名を変更してコピー
決められたフォルダーの中にある決められた名称のファイル(仮にc\document\aaa.xls)を、決められたフォルダーにコピー元のファイル名+毎回指定した数字を付加したファイル名(仮に\document\aaa9999.xls)としてコピーする方法をエクセルのVBAで実現する方法を教えてください。指定する数字の9999はプログラム起動後にダイアログBOXで指定できればベストですが、難しければ指定のセルに毎回入力でもかまいません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
下記のような感じで、 Const STR_FILE_NAME_1 As String = "a:\document\aaa.xls" Const STR_FILE_NAME_2_1 As String = "a:\document\aaa" Const STR_FILE_NAME_2_2 As String = ".xls" Const STR_MSG As String = "数字を入力して下さい。" Dim strFileNum As String Dim strFileName_2 As String strFileNum = InputBox$(STR_MSG) If Len(Trim$(strFileNum)) = O Then Exit Sub strFileName_2 = STR_FILE_NAME_2_1 & Trim$(strFileNum) & STR_FILE_NAME_2_2 Call FileCopy(STR_FILE_NAME_1, strFileName_2) 実際には、ダイアログBOXの入力値の数字チェックや使用不可文字チェック(\など)がさらに必要かと思います。
その他の回答 (3)
- papayuka
- ベストアンサー率45% (1388/3066)
パスを分割する部分をどう処理するかですね。 Excel2000で確認しています、ご参考に。 Sub Test() Dim fName, newName As String, fs As Object On Error GoTo ER: fName = Application.GetOpenFilename("ExcelFile(*.xls), *.xls") If fName = False Then Exit Sub Set fs = CreateObject("Scripting.FileSystemObject") newName = Application.InputBox("Add?", "Add", "0001", Type:=2) newName = fs.GetParentFolderName(fName) & "\" & _ fs.GetBaseName(fName) & newName & "." & _ fs.GetExtensionName(fName) MsgBox "元:" & fName & vbCrLf & _ "新:" & newName ER: Set fs = Nothing End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
ファイル名が c\document\aaa.xls(正しくはc:\documents\aaa.xls?) のブックを読みこんで、ブックの名前をc:\documents\aaa9999.xlsで保存し、必要あればそのブックで作業する。 それをVBAで書けば良いのではないですか。 名前を変えて保存するのはブックのコピーですよね。 そのやり方では、XXだからだめと言うことであれば、XXを指摘し補足して見てください。
補足
早速の回答ありがとうございます。 実は大量のデータを一括で処理したいので、読み込むことなくコピーしたいです。初心者なのでこんなことできればというアイデアはあるのですがなかなか作れないもので。全部作っていただければすごくありがたいのですが、虫がよすぎると思われるならもう少しヒントをいただければうれしいです。
- popesyu
- ベストアンサー率36% (1782/4883)
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_090.html ファイルコピーのサンプルコード。
お礼
ありがとうございました。 今回の問題だけでなくいろいろ参考になりそうです。
お礼
完璧にほしいものが得られました。本当にありがとうございます。記述を見るとなんとなくわかるのですが、自分で作るとなるとまだまだスキル不足です。今回のものを参考にさせて頂き少しでも自分で作れるように勉強します。