更新日:、 作成日:

VBA フォルダの移動

はじめに

Excel VBA マクロでフォルダを移動する方法を紹介します。

MoveFolder 関数を使って、指定したフォルダを他のフォルダに移動できます。

ワイルドカードを使って複数のフォルダや全てのフォルダをまとめて移動できます。

ファイルを移動するには「ファイルの移動」をご覧ください。

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

フォルダの移動

指定したフォルダの移動

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Call fso.MoveFolder("D:\TipsFolder", "D:\ParentFolder\TipsMove") ' フォルダ名を指定して移動
Call fso.MoveFolder("D:\TipsFolder", "D:\ParentFolder\")         ' 同じフォルダ名で移動 (D:\ParentFolder\TipsFolder)

' 後始末
Set fso = Nothing

fso.MoveFolder 関数で指定したパスのフォルダを移動します。

第 1 (source) 引数に移動するフォルダのパスを指定します。フォルダが存在しないときはエラーが発生します。パスにはワイルドカードを指定できますが、詳しくは下記の「複数のフォルダの移動」をご覧ください。

第 2 (destination) 引数に移動先のパスを指定します。フォルダ名を含めるとそのフォルダ名で移動します。パスの最後を \ 記号にすると、そのフォルダの中に同じフォルダ名で移動します。パスが存在しないときはエラーが発生します。既に同じ名前のフォルダが存在するときはエラーが発生します。上書きはできません。

サブフォルダを移動

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim pfl As Folder
Set pfl = fso.GetFolder("D:\ParentFolder") ' 親フォルダを取得

Dim fl As Folder
For Each fl In pfl.SubFolders ' サブフォルダの一覧を取得
    If fl.Name = "SubTips" Then        ' 移動したいフォルダ
        Call fl.Move("D:\TipsCopy")    ' フォルダ名を指定してコピー
        Call fl.Move("D:\TipsFolder\") ' 同じフォルダ名でコピー (D:\TipsFolder\SubTips)
    End If
Next

' 後始末
Set fso = Nothing

fso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

pfl.SubFolders プロパティから、そのフォルダ内にある Folder オブジェクトの一覧を取得できます。

fl.Name プロパティから、そのフォルダの名前を取得できます。これで移動したいフォルダを判定します。

fl.Move 関数でそのフォルダを移動します。使い方は上記で説明した fso.MoveFolder 関数と同じです。MoveFolder の第 1 (source) 引数に、そのフォルダのパスが渡されます。

複数のフォルダを移動

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Call fso.MoveFolder("D:\Tips*", "D:\ParentFolder\")        ' 複数のフォルダをまとめて移動
Call fso.MoveFolder("D:\TipsFolder\*", "D:\ParentFolder\") ' 全てのフォルダをまとめて移動

' 後始末
Set fso = Nothing

fso.MoveFolder 関数の第 1 (source) 引数にワイルドカードを指定して、一致する複数のフォルダをまとめて移動できます。1 つもフォルダが一致しないときはエラーが発生します。

使用できるワイルドカードには次のものがあります。

パターン 説明 使用例 一致例
*任意の長さの文字 (0 文字以上)あ*あ, あい, あいう
?任意の1文字 または 0 文字あ?あい, あか, あき

D:\Tips* を指定すると次のフォルダが一致します。

D:\Tips
D:\Tips1
D:\Tips12
D:\Tips123

D:\Tips? を指定すると次のフォルダが一致します。

D:\Tips
D:\Tips1
D:\Tips2

D:\TipsFolder\* を指定すると、TipsFolder フォルダ内のすべてのフォルダと一致します。

第 2 (destination) 引数には必ずパスの最後を \ 記号にしてフォルダを指定します。パスが存在しないときはエラーが発生します。

ワイルドカードに一致したすべてのフォルダが、指定したフォルダに移動されます。

移動中に既にフォルダが存在してエラーが発生したときは、そこで処理が中断されます。それ以降のフォルダは移動されません。