今回は、ファイルを移動する方法について解説します。
本記事では、サンプルコードを用いてコピペで使える実践的なコードもご紹介します。
- ファイルを移動する2つの方法が分かります。
- ファイル移動時の注意点や、エラーの回避方法についても解説します。
- FileSystemObjectを使用したファイルの移動についても解説します。
前提
ファイルを移動には、以下2つの方法があります。
# | メソッド/ステートメント | 説明 |
---|---|---|
1 | Name | ファイルの移動 |
2 | Move | FileSystemObjectを使用したファイル移動 |

FileSystemObjectについては、以下の記事にて詳しく解説しています。

基本情報
Nameステートメント
ファイルを移動するには、Nameステートメントを使用します。
Nameステートメントは名前を変更するためのステートメントですが、フルパスを指定することでファイルの移動も可能です。
本記事では、ファイル移動用のステートメントとしてご紹介します。
Name oldname As newname
# | 項目名 | 説明 |
---|---|---|
1 | oldname | 移動前のファイルパス |
2 | newname | 移動後のファイルパス 移動前と異なるファイル名を指定すると、ファイル名の変更が可能 |
以下の場合、エラーとなってしまいますのでご注意ください。
1. ファイルが存在しない場合
2. 移動後のフォルダが存在しない場合
3. 移動先に同名のファイルが存在する場合

ファイルやフォルダの存在チェックは、以下の記事にて掲載していますので、よろしければご参考にしてください。


Moveメソッド
FileSystemObjectを使ったファイル移動については、FileオブジェクトのMoveメソッドを使用します。
構文
FileObject.Move destination
引数
# | 引数 | 必須/任意 | 説明 |
---|---|---|---|
1 | destination | 必須 | 移動先のフォルダパスを指定します |
以下の場合、エラーとなってしまいますのでご注意ください。
1. 移動後のフォルダが存在しない場合
2. 移動先に同名のファイルが存在する場合
サンプルコード
指定のファイルを移動する
Public Sub moveFile()
' ファイルを1つ上の階層に移動する
Name "C:\vba-hack\vba\TestFile.txt" As "C:\vba-hack\TestFile.txt"
End Sub

ファイルパスは各自の環境に合わせてご使用ください。
指定のファイルを移動する(FileSystemObject)
Public Sub moveFileForFSO()
Dim fso As New FileSystemObject ' FSOオブジェクト
Dim myFile As File ' Folderオブジェクト
Dim moveFilePath As String ' 移動ファイルパス
Dim moveFolderPath As String ' 移動後フォルダパス
' 移動するファイルパスを指定
moveFilePath = "C:\vba-hack\vba\TestFile.txt"
' 移動後のフォルダパスを指定
moveFolderPath = "C:\vba-hack\"
' Fileオブジェクトを取得
Set myFile = fso.GetFile(moveFilePath)
' ファイルの移動
myFile.Move moveFolderPath
End Sub

Fileオブジェクトの取得方法は、以下の記事にて解説しています。

指定のフォルダ配下のファイルをすべて移動する
Public Sub moveFileForFolder()
Dim fso As New FileSystemObject ' FSOオブジェクト
Dim myFolder As folder ' Folderオブジェクト
Dim myFile As File ' Fileオブジェクト
Dim oldFolderPath As String ' 移動前フォルダパス
Dim newFolderPath As String ' 移動後フォルダパス
' 移動前後のフォルダパスを指定
oldFolderPath = "C:\vba-hack\"
newFolderPath = "C:\vba-hack\vba\"
' 移動前フォルダのFolderオブジェクトを取得
Set myFolder = fso.GetFolder(oldFolderPath)
' 移動前フォルダにあるファイル数分ループ
For Each myFile In myFolder.Files
' 移動後フォルダパスへ移動
myFile.Move newFolderPath
Next myFile
End Sub

Folderオブジェクトの取得方法は、以下の記事にて解説しています。

最後に
今回は、ファイルの移動方法について解説しました。
Nameステートメントだけではなく、少し手間ですがFileSystemObjectを使用することにより、コーディングの幅が広がるのではないでしょうか。
この記事が、皆さまのお力になれば幸いです!
コメント