【Excel VBA】FSOでファイルを別のフォルダに移動する方法 (.Move)

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.FileExistsfso.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メソッドを使います。

  1. **fso.GetFile("移動元のパス")**で、Fileオブジェクトを取得する。
  2. そのオブジェクトに対し、.Move "移動先のパス" を実行する。
  3. (推奨)実行前に、**FileExistsFolderExists**でエラー条件をチェックする。

.Moveメソッドを使いこなすことで、ファイルの整理や、処理済みデータのアーカイブといったワークフローの自動化が、より柔軟に行えるようになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次