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

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

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

この記事を書いた人

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

目次