このページでは以下のフォルダコピーメソッドについて説明します。このメソッドを実行すると、コピー対象フォルダ内のファイルおよびサブフォルダはすべてコピーされます。
※1・・・ワイルドカードを使用することで複数のオブジェクトを同時に操作することが可能。
*(アスタリスク):任意の数(0以上)の文字を表します。
? (クエスチョン):任意の1文字を表します。
使い分けの判断基準
1つのフォルダをコピーする場合
どちらのメソッドを使用しても機能的には同じになりますので、そのときの処理内容により判断します。通常、処理の途中でフォルダオブジェクトを取得済みであれば folder.Copy、フォルダオブジェクトを取得していないのであれば fso.CopyFolderを使用します。
複数のフォルダをコピーする場合
fso.CopyFolderを使用します。コピー元のフォルダ群を上記ワイルドカードで表現する必要があります。ワイルドカードで表現できない場合は folder.Copyでフォルダを1つずつコピーするしかありません。
fso.CopyFolderの使用方法
引数にコピー元、コピー先のフォルダパスを指定してフォルダのコピーを行います。コピー先のフォルダを上書きしたくない場合は、引数 OverWrite に False を指定します。
引数名 | 省略 | 説明 |
---|---|---|
Source | × | コピー元のフォルダを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 フォルダパスは絶対パス、相対パスともに指定可能です。 |
Destination | × | 引数 Source で指定したフォルダのコピー先を表す文字列を指定します。ワイルドカード文字は使用できません。 コピー元のフォルダ名と異なるフォルダ名を指定することで、コピーと同時に名前を変更することができます。 フォルダパスは絶対パス、相対パスともに指定可能です。 |
OverWrite | ○ | 既存フォルダを上書きするかどうかを True(上書きする)または False(上書きしない) で指定します。 既定値は True(上書きする) です。 |
引数 Source に指定したフォルダが存在しない場合、エラーが発生します。 また、引数 OverWrite が False の場合、Destination に指定したフォルダが存在するとエラーが発生します。
引数 Destination にパス区切り文字”¥”で終わるパスを指定すると、既存フォルダとみなされ、このフォルダ内に元のフォルダがコピーされます。パス区切り文字”¥”がついていない場合、新規コピー先フォルダとみなされます。
fso.CopyFolderの使用例
1つのフォルダをコピーする
引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。
以下の例では aaa フォルダを backup フォルダ内にコピーします。
Sub sample_fs034_01()
Dim fso As Object 'ファイルシステムオブジェクト
Dim strSrc As String 'コピー元
Dim strDst As String 'コピー先
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'コピー元フォルダパスの設定
strSrc = "C:\Users\xxx\Desktop\aaa"
'コピー先フォルダパスの設定
strDst = "C:\Users\xxx\Desktop\backup\"
'フォルダのコピー(上書き)
fso.CopyFolder strSrc, strDst
'オブジェクト変数のクリア
Set fso = Nothing
End Sub
1つのフォルダをコピーする(フォルダ名変更あり)
引数 Destination にコピー先のフォルダ名まで指定します。このとき、コピー先フォルダ名の後ろにパス区切り文字”¥”を付けてはいけません。以下の例では、aaa フォルダを backup フォルダ内にコピーし、さらに、フォルダ名を bbb へ変更します。
Sub sample_fs034_02()
Dim fso As Object 'ファイルシステムオブジェクト
Dim strSrc As String 'コピー元
Dim strDst As String 'コピー先
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'コピー元フォルダパスの設定
strSrc = "C:\Users\xxx\Desktop\aaa"
'コピー先フォルダパスの設定(フォルダ名変更)
strDst = "C:\Users\xxx\Desktop\backup\bbb"
'フォルダのコピー(上書き)
fso.CopyFolder strSrc, strDst
'オブジェクト変数のクリア
Set fso = Nothing
End Sub
複数のフォルダを1命令でコピーする
引数 Source にワイルドカードを使用してコピーしたいフォルダ群を表現します。以下の例では、Desktop フォルダ内にある “test” から始まるフォルダをすべて backup フォルダ内へコピーします。
Sub sample_fs034_03()
Dim fso As Object 'ファイルシステムオブジェクト
Dim strSrc As String 'コピー元
Dim strDst As String 'コピー先
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'コピー元フォルダパスの設定
strSrc = "C:\Users\xxx\Desktop\test*"
'コピー先フォルダパスの設定
strDst = "C:\Users\xxx\Desktop\backup\"
'フォルダのコピー(上書き)
fso.CopyFolder strSrc, strDst
'オブジェクト変数のクリア
Set fso = Nothing
End Sub
folder.Copyの使用方法
フォルダオブジェクト内にコピー元のフォルダパス情報を持っているので、引数に必ず指定するのは移動先のフォルダパスのみです。その他の使用方法は fso.CopyFolder に同じです。
引数名 | 省略 | 説明 |
---|---|---|
Destination | × | 引数 Source で指定したフォルダのコピー先を表す文字列を指定します。ワイルドカード文字は使用できません。 コピー元のフォルダ名と異なるフォルダ名を指定することで、コピーと同時に名前を変更することができます。 フォルダパスは絶対パス、相対パスともに指定可能です。 |
OverWrite | ○ | 既存フォルダを上書きするかどうかを True(上書きする) または False(上書きしない) で指定します。 既定値は True です。 |
引数 OverWrite が False の場合、Destination に指定したフォルダが存在するとエラーが発生します。
引数 Destination にパス区切り文字”¥”で終わるパスを指定すると、既存フォルダとみなされ、このフォルダ内に元のフォルダがコピーされます。パス区切り文字”¥”がついていない場合、新規コピー先フォルダとみなされます。
folder.Copyの使用例
1つのフォルダをコピーする
引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。以下の例では aaa フォルダを backup フォルダ内にコピーします。
Sub sample_fs034_04()
Dim fso As Object 'ファイルシステムオブジェクト
Dim folderObj As Object 'フォルダオブジェクト
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'フォルダオブジェクト取得
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
'フォルダのコピー(上書き)
folderObj.Copy "C:\Users\xxx\Desktop\backup\"
'オブジェクト変数のクリア
Set fso = Nothing
Set folderObj = Nothing
End Sub
1つのフォルダをコピーする(フォルダ名変更あり)
引数 Destination にコピー後のフォルダ名を指定します。以下の例では、aaa フォルダを backup フォルダ内にコピーし、さらに、フォルダ名を bbb へ変更します。
Sub sample_fs034_05()
Dim fso As Object 'ファイルシステムオブジェクト
Dim folderObj As Object 'フォルダオブジェクト
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'フォルダオブジェクト取得
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
'フォルダのコピー(上書き)
folderObj.Copy "C:\Users\xxx\Desktop\backup\bbb"
'オブジェクト変数のクリア
Set fso = Nothing
Set folderObj = Nothing
End Sub
フォルダ内のサブフォルダを1つずつコピーする
指定されたフォルダ内に存在するサブフォルダのうち、Like演算子を使用して、あるフォルダ名パターンにマッチするものだけをコピーする例です。以下の例では、フォルダ名が “2013年##月”( # は任意の数字) のパターンにマッチするフォルダを backup フォルダへコピーします。
Sub sample_fs034_06()
Dim fso As Object 'ファイルシステムオブジェクト
Dim folderObj As Object 'フォルダオブジェクト
Dim subfolderObj As Object 'サブフォルダオブジェクト
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'フォルダオブジェクト取得
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\Data")
For Each subfolderObj In folderObj.SubFolders
'フォルダ名判定
If subfolderObj.Name Like "2013年##月" Then
'フォルダのコピー(上書き)
subfolderObj.Copy "C:\Users\xxx\Desktop\backup\"
End If
Next
'オブジェクト変数のクリア
Set fso = Nothing
Set folderObj = Nothing
Set subfolderObj = Nothing
End Sub
fso.GetFolder For Each…Next Like 演算子 Setステートメント
以下の2つの図はマクロ実行前のdataフォルダとbackupフォルダの状態です。
上記サンプルマクロを実行すると、パターン”2013年##月”にマッチするサブフォルダ3つがbackupフォルダにコピーされたことがわかります。