アクセス上位ページ
 
最近の更新内容
(3)-b.FSOによるフォルダ操作A ⇐ [PREV]
[NEXT] ⇒ (3)-d.FSOによるフォルダコピー

Excel VBA ≫ 3.FSO - FSOによるフォルダ操作(3)-c.FSOによるフォルダ移動

ファイルシステムオブジェクトによるフォルダ移動

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

    内容 メソッド
    フォルダ移動 fso.MoveFolder(※1)
    folder.Move


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


    <使い分けの判断基準>
  • 複数のフォルダを移動する場合
  • fso.MoveFolder を使用します。移動元のフォルダ群を上記ワイルドカードで表現する必要があります。 ワイルドカードで表現できない場合は folder.Move でファイルを1つずつ移動させるしかありません。 (⇒ フォルダ内のサブフォルダを1つずつ移動する例
  • 1つのフォルダを移動する場合
  • 上記メソッドのどちらを使用しても機能的には同じになりますので、そのときの処理内容により判断します。 通常、処理の途中でフォルダオブジェクトを取得済みであれば folder.Move、 フォルダオブジェクトを取得していないのであれば fso.MoveFolder を使用します。




fso.MoveFolder

引数に移動元、移動先のフォルダパスを指定してフォルダの移動を行います。

  • 【構文】
    fso.MoveFolder Source, Destination

引数名 省略 説明
Source × 移動するフォルダを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 フォルダパスは絶対パス、相対パスともに指定可能です。
Destination × 引数 Source で指定したフォルダの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。 移動元のフォルダ名と異なるフォルダ名を指定することで、移動と同時に名前を変更することができます。 フォルダパスは絶対パス、相対パスともに指定可能です。
引数 Source に指定したフォルダが存在しない場合、エラーが発生します。引数 Destination にパス区切り文字"¥"で終わるパスを指定すると、既存フォルダとみなされ、このフォルダ内に元のフォルダが移動します。パス区切り文字"¥"がついていない場合、新規移動先フォルダとみなされます。
移動元フォルダ内のファイルを編集中のときにフォルダ移動を行うとエラーが発生します。On Error ステートメント でこのエラーが発生した場合の処理を記述しておくことをおすすめします。

  • 1つのフォルダを移動する(フォルダ名変更なし)
  • 引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。
    以下の例では aaa フォルダを backup フォルダ内に移動します。

    Sub test_fs033_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.MoveFolder strSrc, strDst
    
        'オブジェクト変数のクリア
        Set fso = Nothing
    End Sub
    

  • 1つのフォルダを移動する(フォルダ名変更あり)
  • 引数 Destination に移動先のフォルダ名まで指定します。 このとき、移動先フォルダ名の後ろにパス区切り文字"¥"を付けてはいけません。
    以下の例では、aaa フォルダを backup フォルダ内に移動し、 さらに、フォルダ名を bbb へ変更します。

    Sub test_fs033_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.MoveFolder strSrc, strDst
    
        'オブジェクト変数のクリア
        Set fso = Nothing
    End Sub
    


  • 複数のフォルダを1命令で移動する
  • 引数 Sourceワイルドカードを使用して移動したいフォルダ群を表現します。
    以下の例では、Desktop フォルダ内にある "test" から始まるフォルダをすべて backup フォルダ内へ移動します。

    Sub sample_fs033_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.MoveFolder strSrc, strDst
    
        'オブジェクト変数のクリア
        Set fso = Nothing
    End Sub
    

folder.Move

フォルダオブジェクト内に移動元のフォルダパス情報を持っているので、引数に指定するのは移動先のフォルダパスのみです。 その他の使用方法は fso.MoveFolder に同じです。

  • 【構文】
    folder.Move Destination

引数名 省略 説明
Destination × フォルダの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。 移動元のフォルダ名と異なるフォルダ名を指定することで、移動と同時に名前を変更することができます。 フォルダパスは絶対パス、相対パスともに指定可能です。
引数 Destination にパス区切り文字"¥"で終わるパスを指定すると、既存フォルダとみなされ、このフォルダ内に元のフォルダが移動します。パス区切り文字"¥"がついていない場合、新規移動先フォルダとみなされます。
移動元フォルダ内のファイルを編集中のときにフォルダ移動を行うとエラーが発生します。On Error ステートメント でこのエラーが発生した場合の処理を記述しておくことをおすすめします。

  • 1つのフォルダを移動する(フォルダ名変更なし)
  • 引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。
    以下の例では aaa フォルダを backup フォルダ内に移動します。
    Sub test_fs033_04()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim folderObj   As Object   'フォルダオブジェクト
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'フォルダオブジェクト取得
        Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
    
        'フォルダの移動
        folderObj.Move "C:\Users\xxx\Desktop\backup\"
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set folderObj = Nothing
    End Sub
    


  • 1つのフォルダを移動する(フォルダ名変更あり)
  • 引数 Destination に移動先フォルダ名を指定します。
    以下の例では、aaa フォルダを backup フォルダ内に移動し、 さらに、フォルダ名を bbb へ変更します。
    Sub test_fs033_05()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim folderObj   As Object   'フォルダオブジェクト
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'フォルダオブジェクト取得
        Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
    
        'フォルダの移動
        folderObj.Move "C:\Users\xxx\Desktop\backup\bbb"
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set folderObj = Nothing
    End Sub
    


  • フォルダ内のサブフォルダを1つずつ移動する
  • 指定されたフォルダ内に存在するサブフォルダのうち、Like 演算子を使用して、 あるフォルダ名パターンにマッチするものだけを移動させる例です。
    以下の例では、フォルダ名が "2013年##月"( # は任意の数字) のパターンにマッチするフォルダを backup フォルダへ移動します。
    Sub sample_fs033_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.Move "C:\Users\xxx\Desktop\backup\"
            End If
        Next
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set folderObj = Nothing
        Set sfolderObj = Nothing
    End Sub
    

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

カテゴリ内ページ



Page
Top