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メソッドを使いこなすことで、ファイルの整理や、処理済みデータのアーカイブといったワークフローの自動化が、より柔軟に行えるようになります。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
