FileCopyを使えばファイルコピーを自動化できます。
Sub test()
FileCopy "C:\Users\HTOM\Desktop\Book1.xlsx", "C:\Users\HTOM\Desktop\Book1_copy.xlsx"
End Sub
フォルダーごとコピーすることも可能です。
Sub test()
originalFolder = "C:\Users\HTOM\Desktop\original"
copyFolder = "C:\Users\HTOM\Desktop\copy"
MkDir (copyFolder)
file = Dir(originalFolder & "\" & "*")
Do While file <> ""
FileCopy originalFolder & "\" & file, copyFolder & "\" & file
file = Dir()
Loop
End Sub
ファイルをコピーする方法
Sub test()
FileCopy "C:\Users\HTOM\Desktop\Book1.xlsx", "C:\Users\HTOM\Desktop\Book1_copy.xlsx"
End Sub
デスクトップの”Book1.xlsx”を”Book1_copy.xlsx”としてデスクトップにコピーします。
FileCopyの後に、コピーしたいファイルのパスとコピー後のパスを入れます。
デスクトップにある”Book1.xlsx”のパスは“C:\Users\[ユーザー名]\Desktop\Book1.xlsx”です。
上記コードではファイル名を”Book1_copy.xlsx”に変えています。
これでファイルがコピーできました。
このままではちょっと使いづらいので変数を使って切り分けましょう。
Sub test()
originalFolder = "C:\Users\HTOM\Desktop"
originalName = "Book1.xlsx"
copyFolder = "C:\Users\HTOM\Desktop"
copyName = "Book1_copy.xlsx"
FileCopy originalFolder & "\" & originalName, copyFolder & "\" & copyName
End Sub
コピー元とコピー先のパスを変数にしました。
こうすると使いやすいでしょう。
パスってどうやったらわかるの?
上にあるバーをクリックしたら全選択されるのでコピペしてください。
仮にコピー先をドキュメントフォルダにしたいなら、
そのアドレスバーをコピーしてcopyFolderに貼り付ければ大丈夫です。
同名ファイルが存在する場合
コピー先に既に同名ファイルがある場合は上書き保存されます。
元々入っていた大事なファイルを上書きしちゃった。。。
なんてことにならないように注意したいですね。
そこでファイルコピーを実行する前に、同名ファイルが存在するかチェックしましょう。
Sub test()
originalFolder = "C:\Users\HTOM\Desktop"
originalName = "Book1.xlsx"
copyFolder = "C:\Users\HTOM\Desktop"
copyName = "Book1_copy.xlsx"
If Dir(copyFolder & "\" & copyName) = "" Then
FileCopy originalFolder & "\" & originalName, copyFolder & "\" & copyName
Else
MsgBox copyName & "がコピー先に存在します。"
End If
End Sub
Dirは()の中に入れたパスのファイルが存在するかを確認する関数です。
もし存在するならそのファイル名を返し、存在しないならカラの文字(“”)を返します。
つまり既に同名ファイルが存在しないならDirは””ですので、これをif文でチェックしましょう。
Dirが””ならそのままコピーし、カラじゃないなら同名ファイルがあることを伝えます。
これで重要なファイルを上書き保存してしまう危険性がなくなりましたね。
フォルダーごとファイルをコピーする方法
ファイル1つだけではなく、フォルダごと複数ファイルをコピーしたい場合もあります。
デスクトップにある”original”フォルダに4つのファイルがあるとしましょう。
これらをフォルダごとコピーする方法は2つです。
②の方法は次節で解説しますので今回は①を実装します。
新規フォルダを作成する
Sub test()
MkDir ("C:\Users\HTOM\Desktop\copy")
End Sub
コピー先のフォルダとしてデスクトップに”copy”フォルダを作りましょう。
MkDir()の中に新規作成したい場所とフォルダ名を足したパスを入れましょう。
これでフォルダを作成できました。
フォルダの中身をコピーする
MkDirで作ったフォルダの中に全ファイルをコピーします。
Sub test()
file = Dir("C:\Users\HTOM\Desktop\original\" & "*")
Do While file <> ""
MsgBox file
file = Dir()
Loop
End Sub
元々ある”original”フォルダの中身にアクセスしましょう。
Dir()に中身を確認したいフォルダのパスを入れてください。
ここで大事なのはワイルドカード(*)です。
ワイルドカードは任意の文字に対応するので、”Book1.xlsx”でも”Book2.xlsx”でもOKです。
これをloop文で繰り返し処理にかけましょう。
Dir()と打てば次の該当ファイルにアクセスできます。
もし全ファイルにアクセス終了したらカラ””になるので、その時がloop文の終わりです。
各ファイルの名前が手に入ったら、あとはFileCopyをするだけです。
Sub test()
file = Dir("C:\Users\HTOM\Desktop\original\" & "*")
Do While file <> ""
FileCopy "C:\Users\HTOM\Desktop\original\" & file, "C:\Users\HTOM\Desktop\copy\" & file
file = Dir()
Loop
End Sub
ここまでの一連のコードをつなげたら完成です。
Sub test()
originalFolder = "C:\Users\HTOM\Desktop\original"
copyFolder = "C:\Users\HTOM\Desktop\copy"
MkDir (copyFolder)
file = Dir(originalFolder & "\" & "*")
Do While file <> ""
FileCopy originalFolder & "\" & file, copyFolder & "\" & file
file = Dir()
Loop
End Sub
コピー元フォルダを変えたいならoriginalFolderを、
コピー先を変えたいならcopyFolderを編集してくださね。
FileSystemObject
これまで紹介したファイルやフォルダのコピーはFileSystemObjectでも実装可能です。
手法が変わるだけで実行結果はFileCopyと変わりません。
インスタンスの作成
Sub test()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
End Sub
今回使うFileSystemObjectは道具箱みたいなものです。
まずは箱(インスタンス)を作りましょう。
すると”ファイルをコピーする道具”や”フォルダをコピーする道具”を使うことができます。
Dimは変数の宣言です。FSOという名前の変数を作っています。
Setで変数FSOとしてインスタンス(道具箱)を作成しましょう。
FSOとかインスタンスとか色々ありますが、
決まり文句なので暗記しなくて大丈夫です。
最後にCreateObject(“Scripting.FileSystemObject”)で箱を作れます。
これで変数名FSOとして道具箱が使えるようになりました。
ファイルをコピーする
Sub test()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.Copyfile "C:\Users\HTOM\Desktop\Book1.xlsx", "C:\Users\HTOM\Desktop\Book1_copy.xlsx"
End Sub
ファイルをコピーする場合は、Copyfileを使いましょう。
渡すパスはこれまでのFileCopyと同じように、コピー元とコピー先のパスです。
フォルダをコピーする
Sub test()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.Copyfolder "C:\Users\HTOM\Desktop\original", "C:\Users\HTOM\Desktop\copy"
End Sub
フォルダごとコピーしたいなら、Copyfolderです。
これもコピー元のフォルダのパスとコピー先のパスを渡しましょう。
すると中身ごと一気にコピーしてくれます。
ファイルを移動する
Sub test()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.Movefile "C:\Users\HTOM\Desktop\Book1.xlsx", "C:\Users\HTOM\Documents\"
End Sub
ファイルをコピーではなく移動したいなら、Movefileを使います。
上記はデスクトップにある”Book1.xlsx”をドキュメントフォルダに移動するコードです。
まとめ
今回はファイルをコピーする方法を解説しました。
面倒な事務作業を一瞬で終わらせられるので便利ですね。
コメント