ファイルシステムオブジェクトによるファイルコピー

このページでは以下のファイルコピーメソッドについて説明します。

※1・・・ワイルドカードを使用することで複数のオブジェクトを同時に操作することが可能。
*(アスタリスク):任意の数(0以上)の文字を表します。
? (クエスチョン):任意の1文字を表します。

スポンサーリンク

使い分けの判断基準

1つのファイルをコピーする場合

どちらのメソッドを使用しても機能的には同じになりますので、そのときの処理内容により判断します。通常、処理の途中でファイルオブジェクトを取得済みであれば file.Copy、ファイルオブジェクトを取得していないのであれば fso.CopyFileを使用します。

複数のファイルをコピーする場合

fso.CopyFileを使用します。コピー元のファイル群を上記ワイルドカードで表現する必要があります。ワイルドカードで表現できない場合は file.Copyでファイルを1つずつコピーするしかありません。

fso.CopyFileの使用方法

引数にコピー元、コピー先のファイルパスを指定してファイルのコピーを行います。 コピー先のファイルを上書きしたくない場合は、引数 OverWriteFiles に False を指定します。

構文
fso.CopyFile Source, Destination [, OverWriteFiles]
引数名 省略 説明
Source × コピー元のファイルを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 ファイルパスは絶対パス、相対パスともに指定可能です。
Destination × 引数 Source で指定したファイルのコピー先を表す文字列を指定します。ワイルドカード文字は使用できません。 ファイル名まで指定することで、コピーしたファイルの名前を変更することができます。 ファイルパスは絶対パス、相対パスともに指定可能です。
OverWriteFiles 既存ファイルを上書きするかどうかを True(上書きする)または False(上書きしない) で指定します。 既定値は True(上書きする) です。

引数 Source に指定したファイルが存在しない場合、エラーが発生します。また、引数 OverWriteFiles が False の場合、Destination に指定したファイルが存在するとエラーが発生します。

fso.CopyFileの使用例

1つのファイルをコピーする

引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。以下の例では vba フォルダ内にある test.txt を backup フォルダ内にコピーします。

Sub sample_fs024_01()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim strSrc      As String   'コピー元
    Dim strDst      As String   'コピー先

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    'コピー元ファイルパスの設定
    strSrc = "C:¥Users¥xxx¥Desktop¥vba¥test.txt"
    'コピー先フォルダパスの設定
    strDst = "C:\Users\xxx\Desktop\backup\"

    'ファイルのコピー(上書き)
    fso.CopyFile strSrc, strDst

    'オブジェクト変数のクリア
    Set fso = Nothing
End Sub

  Setステートメント

1つのファイルをコピーする(ファイル名変更あり)

引数 Destination にコピー後のファイル名を指定します。 以下の例では、vba フォルダ内にある test.txt を backup フォルダ内にコピーし、 さらに、ファイル名を test_130817.txt へ変更します。

Sub sample_fs024_02()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim strSrc      As String   'コピー元
    Dim strDst      As String   'コピー先

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    'コピー元ファイルパスの設定
    strSrc = "C:\Users\xxx\Desktop\vba\test.txt"
    'コピー先ファイルパスの設定(ファイル名変更)
    strDst = "C:\Users\xxx\Desktop\backup\test_130817.txt"

    'ファイルのコピー(上書き)
    fso.CopyFile strSrc, strDst

    'オブジェクト変数のクリア
    Set fso = Nothing
End Sub

  Setステートメント

複数のファイルを1命令でコピーする

引数 Sourceワイルドカードを使用してコピーしたいファイル群を表現します。 以下の例では、vba フォルダ内にあるテキストファイルをすべて backup フォルダ内へコピーします。

Sub sample_fs024_03()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim strSrc      As String   'コピー元
    Dim strDst      As String   'コピー先

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    'コピー元ファイルパスの設定
    strSrc = "C:\Users\xxx\Desktop\vba\*.txt"
    'コピー先フォルダパスの設定
    strDst = "C:\Users\xxx\Desktop\backup\"

    'ファイルのコピー(上書き)
    fso.CopyFile strSrc, strDst

    'オブジェクト変数のクリア
    Set fso = Nothing
End Sub

  Setステートメント

file.Copyの使用方法

ファイルオブジェクト内にコピー元のファイルパス情報を持っているので、引数に必ず指定するのはコピー先のファイルパスのみです。その他の使用方法は fso.CopyFile に同じです。

構文
file.Copy Destination [, OverWriteFiles]
引数名 省略 説明
Destination × 引数 Source で指定したファイルのコピー先を表す文字列を指定します。ワイルドカード文字は使用できません。 ファイル名まで指定することで、コピーしたファイルの名前を変更することができます。 ファイルパスは絶対パス、相対パスともに指定可能です。
OverWriteFiles 既存ファイルを上書きするかどうかを True(上書きする) または False(上書きしない) で指定します。 既定値は True です。

引数 OverWriteFiles が False の場合、Destination に指定したファイルが存在するとエラーが発生します。

file.Copyの使用例

1つのファイルをコピーする

引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。 以下の例では vba フォルダ内にある test.txt を backup フォルダ内にコピーします。

Sub sample_fs024_04()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim fileObj     As Object   'ファイルオブジェクト

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    'ファイルオブジェクト取得
    Set fileObj = fso.GetFile("C:\Users\xxx\Desktop\vba\test.txt")

    'ファイルのコピー(上書き)
    fileObj.Copy "C:\Users\xxx\Desktop\backup\"

    'オブジェクト変数のクリア
    Set fso = Nothing
    Set fileObj = Nothing
End Sub

 fso.GetFile  Setステートメント

1つのファイルをコピーする(ファイル名変更あり)

引数 Destination にコピー後のファイル名を指定します。 以下の例では、vba フォルダ内にある test.txt を backup フォルダ内にコピーし、 さらに、ファイル名を test_130817.txt へ変更します。

Sub sample_fs024_05()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim fileObj     As Object   'ファイルオブジェクト

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    'ファイルオブジェクト取得
    Set fileObj = fso.GetFile("C:\Users\xxx\Desktop\vba\test.txt")

    'ファイルのコピー(上書き)
    fileObj.Copy "C:\Users\xxx\Desktop\backup\test_130817.txt"

    'オブジェクト変数のクリア
    Set fso = Nothing
    Set fileObj = Nothing
End Sub

 fso.GetFile  Setステートメント

フォルダ内の複数ファイルを1つずつコピーする

指定されたフォルダ内のファイルのうち、Like演算子 を使用して、あるファイル名パターンにマッチするものだけをコピーする例です。以下の例では、ファイル名が”a”と4ケタの数字からなるテキストファイルを backup フォルダへコピーします。

数値4ケタは2種類のワイルドカード( * および ? )では表現できません。? は任意の1文字を表すため “a????.txt” としてしまうと “aaaaa.txt” などもコピーの対象となってしまいます。このため、Like演算子 と数字を表す”#”を使用してファイル名の判定を行っています。

Sub sample_fs024_06()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim folderObj   As Object   'フォルダオブジェクト
    Dim fileObj     As Object   'ファイルオブジェクト

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    'フォルダオブジェクト取得
    Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\vba")

    For Each fileObj In folderObj.Files
        'ファイル名判定
        If fileObj.Name Like "a####.txt" Then
            'ファイルのコピー(上書き)
            fileObj.Copy "C:\Users\xxx\Desktop\backup\"
        End If
    Next

    'オブジェクト変数のクリア
    Set fso = Nothing
    Set folderObj = Nothing
    Set fileObj = Nothing
End Sub

 fso.GetFolder For Each…Next Like 演算子  Setステートメント

以下の2つの図はマクロ実行前のvbaフォルダとbackupフォルダの状態です。

実行前のvbaフォルダの内容
実行前のvbaフォルダの内容
実行前のbackupフォルダの内容
実行前のbackupフォルダの内容

上記サンプルマクロを実行すると、aから始まる数値4桁のテキストファイル2つがbackupフォルダにコピーされたことがわかります。

sample_fs024_06実行後のvbaフォルダの内容
sample_fs024_06実行後のvbaフォルダの内容
sample_fs024_06実行後のbackupフォルダの内容
sample_fs024_06実行後のbackupフォルダの内容

 
ファイルシステムオブジェクトのプロパティ・メソッド
ファイルシステムオブジェクトによるフォルダコピー

タイトルとURLをコピーしました