更新日:、 作成日:
VBA フォルダのコピー
はじめに
Excel VBA マクロでフォルダをコピーする方法を紹介します。
CopyFolder 関数を使って指定したフォルダを別の名前や、他のフォルダにコピーまたは上書きできます。
ワイルドカードを使って複数のフォルダや全てのフォルダをまとめてコピーできます。
FileSystemObject について
ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。
コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。
フォルダのコピー
指定したフォルダのコピー
Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化
Call fso.CopyFolder("D:\TipsFolder", "D:\TipsCopy", True) ' フォルダ名を指定してコピー
Call fso.CopyFolder("D:\TipsFolder", "D:\ParentFolder\", True) ' 同じフォルダ名でコピー (D:\ParentFolder\TipsFolder)
' 後始末
Set fso = Nothing
fso.CopyFolder 関数で指定したパスのフォルダをコピーします。
第 1 (source) 引数にコピーするフォルダのパスを指定します。フォルダが存在しないときはエラーが発生します。パスにはワイルドカードを指定できますが、詳しくは下記の「複数のフォルダのコピー」をご覧ください。
第 2 (destination) 引数にコピー先のパスを指定します。フォルダ名を含めるとそのフォルダ名でコピーします。パスの最後を \ 記号にすると、そのフォルダの中に同じフォルダ名でコピーします。パスが存在しないときはエラーが発生します。
第 3 (overwrite) 引数に True を指定すると上書きしてコピーします。上書きするフォルダやファイルが読み取り専用のときはエラーが発生し、そこで処理が中断します。それ以降のフォルダやファイルはコピーされません。False または省略すると既にフォルダが存在しているときはエラーが発生します。
サブフォルダをコピー
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim pfl As Folder
Set pfl = fso.GetFolder("D:\ParentFolder") ' 親フォルダを取得
Dim fl As Folder
For Each fl In pfl.SubFolders ' サブフォルダの一覧を取得
If fl.Name = "SubTips" Then ' コピーしたいフォルダ
Call fl.Copy("D:\TipsCopy", True) ' フォルダ名を指定してコピー
Call fl.Copy("D:\TipsFolder\", True) ' 同じフォルダ名でコピー (D:\TipsFolder\SubTips)
End If
Next
' 後始末
Set fso = Nothing
fso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。
pfl.SubFolders プロパティから、そのフォルダ内にある Folder オブジェクトの一覧を取得できます。
fl.Name プロパティから、そのフォルダの名前を取得できます。これでコピーしたいフォルダを判定します。
fl.Copy 関数でそのフォルダをコピーします。使い方は上記で説明した fso.CopyFolder 関数と同じです。CopyFolder の第 1 (source) 引数に、そのフォルダのパスが渡されます。
複数のフォルダをコピー
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Call fso.CopyFolder("D:\Tips*", "D:\ParentFolder\", True) ' 複数のフォルダをまとめてコピー
Call fso.CopyFolder("D:\TipsFolder\*", "D:\ParentFolder\", True) ' 全てのフォルダをまとめてコピー
' 後始末
Set fso = Nothing
fso.CopyFolder 関数の第 1 (source) 引数にワイルドカードを指定して、一致する複数のフォルダをまとめてコピーできます。1 つもフォルダが一致しないときはエラーが発生します。
使用できるワイルドカードには次のものがあります。
パターン | 説明 | 使用例 | 一致例 |
* | 任意の長さの文字 (0 文字以上) | あ* | あ, あい, あいう |
? | 任意の1文字 または 0 文字 | あ? | あい, あか, あき |
D:\Tips* を指定すると次のフォルダが一致します。
D:\Tips
D:\Tips1
D:\Tips12
D:\Tips123
D:\Tips? を指定すると次のフォルダが一致します。
D:\Tips
D:\Tips1
D:\Tips2
D:\TipsFolder\* を指定すると、TipsFolder フォルダ内のすべてのフォルダと一致します。
第 2 (destination) 引数には必ずパスの最後を \ 記号にしてフォルダを指定します。パスが存在しないときはエラーが発生します。
ワイルドカードに一致したすべてのフォルダが、指定したフォルダにコピーされます。
コピー中に読み取り専用に上書きするなどでエラーが発生したときは、そこで処理が中断されます。それ以降のフォルダやファイルはコピーされません。
スポンサーリンク