アクセス上位ページ
 
最近の更新内容
(3)-c.FSOによるフォルダ移動 ⇐ [PREV]
[NEXT] ⇒ (3)-e.FSOによるフォルダ削除

Excel VBA ≫ 3.FSO - FSOによるフォルダ操作(3)-d.FSOによるフォルダコピー

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

このページでは下表のフォルダコピーメソッドについて説明します。 このメソッドを実行すると、コピー対象フォルダ内のファイルおよびサブフォルダはすべてコピーされます。

    内容 メソッド
    フォルダコピー fso.CopyFolder(※1)
    folder.Copy


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


    <使い分けの判断基準>
  • 複数のフォルダをコピーする場合
  • fso.CopyFolder を使用します。コピー元のフォルダ群を上記ワイルドカードで表現する必要があります。 ワイルドカードで表現できない場合は folder.Copy でフォルダを1つずつコピーするしかありません。 (⇒ フォルダ内のサブフォルダを1つずつコピーする例

  • 1つのフォルダをコピーする場合
  • 上記メソッドのどちらを使用しても機能的には同じになりますので、そのときの処理内容により判断します。 通常、処理の途中でフォルダオブジェクトを取得済みであれば folder.Copy、 フォルダオブジェクトを取得していないのであれば fso.CopyFolder を使用します。




fso.CopyFolder

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

  • 【構文】
    fso.CopyFolder Source, Destination [, OverWrite]

引数名 省略 説明
Source × コピー元のフォルダを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 フォルダパスは絶対パス、相対パスともに指定可能です。
Destination × 引数 Source で指定したフォルダのコピー先を表す文字列を指定します。ワイルドカード文字は使用できません。 コピー元のフォルダ名と異なるフォルダ名を指定することで、コピーと同時に名前を変更することができます。 フォルダパスは絶対パス、相対パスともに指定可能です。
OverWrite 既存フォルダを上書きするかどうかを True(上書きする)または False(上書きしない) で指定します。 既定値は True(上書きする) です。
引数 Source に指定したフォルダが存在しない場合、エラーが発生します。また、引数 OverWrite が False の場合、Destination に指定したフォルダが存在するとエラーが発生します。
引数 Destination にパス区切り文字"¥"で終わるパスを指定すると、既存フォルダとみなされ、このフォルダ内に元のフォルダがコピーされます。パス区切り文字"¥"がついていない場合、新規コピー先フォルダとみなされます。

  • 1つのフォルダをコピーする(フォルダ名変更なし)
  • 引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。
    以下の例では aaa フォルダを backup フォルダ内にコピーします。
    Sub test_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 test_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 に同じです。

  • 【構文】
    folder.Copy Destination [, OverWrite]

引数名 省略 説明
Destination × 引数 Source で指定したフォルダのコピー先を表す文字列を指定します。ワイルドカード文字は使用できません。 コピー元のフォルダ名と異なるフォルダ名を指定することで、コピーと同時に名前を変更することができます。 フォルダパスは絶対パス、相対パスともに指定可能です。
OverWrite 既存フォルダを上書きするかどうかを True(上書きする) または False(上書きしない) で指定します。 既定値は True です。
引数 OverWrite が False の場合、Destination に指定したフォルダが存在するとエラーが発生します。
引数 Destination にパス区切り文字"¥"で終わるパスを指定すると、既存フォルダとみなされ、このフォルダ内に元のフォルダがコピーされます。パス区切り文字"¥"がついていない場合、新規コピー先フォルダとみなされます。

  • 1つのフォルダをコピーする(フォルダ名変更なし)
  • 引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。
    以下の例では aaa フォルダを backup フォルダ内にコピーします。
    Sub test_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 test_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 sfolderObj  As Object   'サブフォルダオブジェクト
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'フォルダオブジェクト取得
        Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\Data")
    
        For Each sfolderObj In folderObj.SubFolders
            'フォルダ名判定
            If sfolderObj.Name Like "2013年##月" Then
                'フォルダのコピー(上書き)
                sfolderObj.Copy "C:\Users\xxx\Desktop\backup\"
            End If
        Next
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set folderObj = Nothing
        Set sfolderObj = Nothing
    End Sub
    

    <実行前 - Data フォルダの内容> 実行前のDataフォルダの内容 <実行前 - backup フォルダの内容> 実行前のbackupフォルダの内容 <sample_fs034_06 実行後 - Data フォルダの内容> sample_fs034_06実行後のDataフォルダの内容 <sample_fs034_06 実行後 - backup フォルダの内容> sample_fs034_06実行後のbackupフォルダの内容

カテゴリ内ページ



Page
Top