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

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

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

スポンサーリンク

使い分けの判断基準

1つのフォルダを移動させる場合

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

複数のフォルダを移動させる場合

fso.MoveFolder を使用します。移動元のフォルダ群を上記ワイルドカードで表現する必要があります。ワイルドカードで表現できない場合は folder.Move でフォルダを1つずつ移動させるしかありません。

fso.MoveFolderの使用方法

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

構文
fso.MoveFolder Source, Destination
引数名 省略 説明
Source × 移動するフォルダを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。フォルダパスは絶対パス、相対パスともに指定可能です。
Destination × 引数 Source で指定したフォルダの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。 移動元のフォルダ名と異なるフォルダ名を指定することで、移動と同時に名前を変更することができます。 フォルダパスは絶対パス、相対パスともに指定可能です。

引数 Source に指定したフォルダが存在しない場合、エラーが発生します。引数 Destination にパス区切り文字”¥”で終わるパスを指定すると、既存フォルダとみなされ、このフォルダ内に元のフォルダが移動します。パス区切り文字”¥”がついていない場合、新規移動先フォルダとみなされます。

移動元フォルダ内のファイルを編集中のときにフォルダ移動を行うとエラーが発生します。 On Errorステートメント でこのエラーが発生した場合の処理を記述しておくことをおすすめします。

fso.MoveFolderの使用例

1つのフォルダを移動する

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

Sub sample_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

  Setステートメント

1つのフォルダを移動する(フォルダ名変更あり)

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

Sub sample_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

  Setステートメント

複数のフォルダを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

  Setステートメント

folder.Moveの使用方法

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

構文
folder.Move Destination
引数名 省略 説明
Destination × フォルダの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。 移動元のフォルダ名と異なるフォルダ名を指定することで、移動と同時に名前を変更することができます。 フォルダパスは絶対パス、相対パスともに指定可能です。

引数 Destination にパス区切り文字”¥”で終わるパスを指定すると、既存フォルダとみなされ、このフォルダ内に元のフォルダが移動します。パス区切り文字”¥”がついていない場合、新規移動先フォルダとみなされます。

移動元フォルダ内のファイルを編集中のときにフォルダ移動を行うとエラーが発生します。 On Errorステートメント でこのエラーが発生した場合の処理を記述しておくことをおすすめします。

folder.Moveの使用例

1つのフォルダを移動する

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

Sub sample_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

 fso.GetFolder  Setステートメント

1つのフォルダを移動する(フォルダ名変更あり)

引数 Destination に移動先フォルダ名を指定します。以下の例では、aaa フォルダを backup フォルダ内に移動し、さらに、フォルダ名を bbb へ変更します。

Sub sample_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

 fso.GetFolder  Setステートメント

フォルダ内のサブフォルダを1つずつ移動する

指定されたフォルダ内に存在するサブフォルダのうち、Like演算子を使用して、あるフォルダ名パターンにマッチするものだけを移動させる例です。

以下の例では、フォルダ名が “2013年##月”( # は任意の数字) のパターンにマッチするフォルダを backup フォルダへ移動します。

Sub sample_fs033_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.Move "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フォルダの状態です。

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

上記サンプルマクロを実行すると、パターン”2013年##月”にマッチするサブフォルダ3つがbackupフォルダに移動したことがわかります。

sample_fs033_06実行後のDataフォルダの内容
sample_fs033_06実行後のDataフォルダの内容
sample_fs033_06実行後のbackupフォルダの内容
sample_fs033_06実行後のbackupフォルダの内容

 
ファイルシステムオブジェクトのプロパティ・メソッド
ファイルシステムオブジェクトによるファイル移動

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