VBAマクロで、月次処理が終わったフォルダを「処理済み」フォルダに移動させたり、プロジェクトフォルダをバックアップ用の場所に移動させたりと、フォルダそのものを中身ごと移動させたい場合があります。
FileSystemObject (FSO)の**.Moveメソッド**を使えば、フォルダと、その中に含まれる全てのファイルやサブフォルダを、一つの命令で簡単に移動させることができます。
この記事では、FSOを使ってフォルダを移動させる基本的な方法と、エラーを防ぐための注意点を解説します。
【準備】参照設定
FSOを快適に利用するため、VBAエディタでツール > 参照設定を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。
完成したVBAコード
以下は、「Inbox」というフォルダを、同じ階層にある「Archive」というフォルダの中に移動させるVBAコードです。
VB.Net
'参照設定: Microsoft Scripting Runtime
Sub MoveFolderWithFSO()
    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim sourceFolder As Folder
    Dim sourceFolderPath As String
    Dim destinationFolderPath As String
    '--- 設定 ---
    ' 移動したいフォルダのパス
    sourceFolderPath = ThisWorkbook.Path & "\Inbox"
    ' 移動先の親フォルダのパス
    destinationFolderPath = ThisWorkbook.Path & "\Archive\"
    '--- 設定ここまで ---
    '--- 1. 移動元・移動先の存在を確認 ---
    If Not fso.FolderExists(sourceFolderPath) Then
        MsgBox "移動元のフォルダが見つかりません。" & vbCrLf & sourceFolderPath, vbCritical
        Exit Sub
    End If
    If Not fso.FolderExists(destinationFolderPath) Then
        ' 移動先フォルダがなければ作成する
        fso.CreateFolder destinationFolderPath
    End If
    ' 移動先に同名フォルダがあればエラーになるためチェック
    If fso.FolderExists(destinationFolderPath & fso.GetFileName(sourceFolderPath)) Then
        MsgBox "移動先に同名のフォルダが既に存在します。", vbCritical
        Exit Sub
    End If
    
    '--- 2. 移動させたいフォルダのオブジェクトを取得 ---
    Set sourceFolder = fso.GetFolder(sourceFolderPath)
    '--- 3. .Moveメソッドでフォルダを移動 ---
    sourceFolder.Move Destination:=destinationFolderPath
    MsgBox "フォルダ「" & sourceFolder.Name & "」を" & vbCrLf & _
           "「" & destinationFolderPath & "」に移動しました。"
           
    ' オブジェクトを解放
    Set sourceFolder = Nothing
    Set fso = Nothing
End Sub
コードのポイント解説
Folderオブジェクトの .Move メソッド
移動したいフォルダオブジェクト.Move 移動先のフォルダパス
.Moveメソッドは、fso.GetFolderで取得したFolderオブジェクトに対して実行します。このメソッドを実行すると、フォルダとその中に含まれるすべてのファイルとサブフォルダが、再帰的に指定した場所へ移動します。
元の場所からは、フォルダは完全に削除されます(コピーではなく移動です)。
Destination引数(移動先のパス)
引数で指定する移動先のパスは、**「どのフォルダの中に移動させたいか」**という親フォルダのパスを指定します。
sourceFolder.Move Destination:="C:\Archive\"
このコードは、sourceFolderオブジェクトが示すフォルダを、C:\Archive\というフォルダの中に移動させます。
【重要】エラーを防ぐための注意点
フォルダの.Moveメソッドは、以下の条件で実行時エラーを発生させます。
- 移動元のフォルダが存在しない。
- 移動先の親フォルダが存在しない。
- 移動先に、既に同名のフォルダ(またはファイル)が存在する。
そのため、Moveメソッドを実行する前には、サンプルコードのように**fso.FolderExists**を使って、移動元と移動先の状態を事前にチェックするのが、堅牢なマクルを作成するための定石です。移動先のフォルダが存在しない場合は、fso.CreateFolderで作成してあげると親切な設計になります。
まとめ
FSOでフォルダごと移動するには、Folderオブジェクトの.Moveメソッドを使います。
- **fso.GetFolder("移動元のパス")**で、Folderオブジェクトを取得する。
- そのオブジェクトに対し、.Move "移動先の親フォルダパス"を実行する。
- (推奨)実行前に、**FolderExists**でエラー条件をチェックする。
.Moveメソッドを使いこなすことで、処理済みデータのアーカイブ化や、日次・月次フォルダの整理といった、ファイルシステムの管理を伴うワークフローを効率的に自動化できます。

 
			 
			 
			 
			 
			 
			 
			