VBAマクロで特定のファイルを処理した後、そのファイルを「処理済み」フォルダに移動させて整理したい、という場面は非常に多くあります。
FileSystemObject (FSO)の**.Moveメソッド**を使えば、ファイルの移動を簡単かつ確実に行うことができます。この記事では、FSOを使ってファイルを移動させる基本的な方法と、エラーを防ぐための注意点を解説します。
【準備】参照設定
FSOを快適に利用するため、VBAエディタでツール > 参照設定を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。
完成したVBAコード
以下は、「Inbox」というサブフォルダにある「Data_A.xlsx」というファイルを、さらにその中の「Processed」フォルダに移動させるVBAコードです。
'参照設定: Microsoft Scripting Runtime
Sub MoveFileWithFSO()
    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim sourceFile As File
    Dim sourceFilePath As String
    Dim destinationFolderPath As String
    '--- 設定 ---
    sourceFilePath = ThisWorkbook.Path & "\Inbox\Data_A.xlsx"
    destinationFolderPath = ThisWorkbook.Path & "\Inbox\Processed\"
    '--- 設定ここまで ---
    '--- 1. 移動元ファイルと、移動先フォルダの存在を確認 ---
    If Not fso.FileExists(sourceFilePath) Then
        MsgBox "移動元のファイルが見つかりません。" & vbCrLf & sourceFilePath, vbCritical
        Exit Sub
    End If
    If Not fso.FolderExists(destinationFolderPath) Then
        MsgBox "移動先のフォルダが見つかりません。先に作成してください。", vbCritical
        Exit Sub
    End If
    
    '--- 2. 移動させたいファイルのオブジェクトを取得 ---
    Set sourceFile = fso.GetFile(sourceFilePath)
    '--- 3. .Moveメソッドでファイルを移動 ---
    sourceFile.Move destinationFolderPath
    MsgBox "ファイル「" & sourceFile.Name & "」を" & vbCrLf & _
           "「" & destinationFolderPath & "」に移動しました。"
           
    ' オブジェクトを解放
    Set sourceFile = Nothing
    Set fso = Nothing
End Sub
コードのポイント解説
Fileオブジェクトの .Move メソッド
移動したいファイルオブジェクト.Move 移動先のパス
このコードの核心部分です。まず、fso.GetFileで移動させたいファイルのFileオブジェクトを取得します。次に、そのオブジェクトの.Moveメソッドを実行することで、ファイルを指定した場所に移動させます。
.Moveメソッドの引数(移動先のパス)の指定方法によって、2つの動作があります。
1. 移動先のパスに「フォルダ」を指定した場合
sourceFile.Move "C:\MyProject\Archive\"
この場合、ファイルは元の名前を維持したまま、指定されたフォルダの中に移動します。
2. 移動先のパスに「フルパス(フォルダ+新しいファイル名)」を指定した場合
sourceFile.Move "C:\MyProject\Archive\Data_A_Processed.xlsx"
この場合、ファイルは指定されたフォルダに移動すると同時に、ファイル名が変更されます。「移動と名前の変更」を一度に行うことができます。
【重要】エラーを防ぐための注意点
.Moveメソッドは、以下の条件で実行時エラーを発生させます。
- 移動元のファイルが存在しない。
- 移動先のフォルダが存在しない。
- 移動先に、既に同名のファイルが存在する。
そのため、Moveメソッドを実行する前には、サンプルコードのように**fso.FileExistsやfso.FolderExists**を使って、移動元と移動先の状態を事前にチェックするのが、堅牢なマクロを作成するための定石です。
【応用】フォルダ内のファイルをすべて移動する
このテクニックを応用すれば、指定したフォルダ内にあるファイルを、すべて別のフォルダへ一括で移動する処理も簡単に記述できます。
Sub MoveAllFilesInFolder()
    Dim fso As New FileSystemObject
    Dim sourceFolder As Folder
    Dim f As File
    
    Set sourceFolder = fso.GetFolder(ThisWorkbook.Path & "\Inbox")
    
    ' フォルダ内の全ファイルをループ
    For Each f In sourceFolder.Files
        ' 1つずつ「Processed」フォルダに移動
        f.Move ThisWorkbook.Path & "\Inbox\Processed\"
    Next f
    
    MsgBox "すべてのファイルを移動しました。"
End Sub
まとめ
FSOでファイルを移動するには、Fileオブジェクトの.Moveメソッドを使います。
- **fso.GetFile("移動元のパス")**で、Fileオブジェクトを取得する。
- そのオブジェクトに対し、.Move "移動先のパス"を実行する。
- (推奨)実行前に、**FileExistsやFolderExists**でエラー条件をチェックする。
.Moveメソッドを使いこなすことで、ファイルの整理や、処理済みデータのアーカイブといったワークフローの自動化が、より柔軟に行えるようになります。

 
			 
			 
			 
			 
			 
			 
			