【Excel VBA】ファイルを移動する(Name/Move)

はじめに

今回は、ファイルを移動する方法について解説します。
本記事では、サンプルコードを用いてコピペで使える実践的なコードもご紹介します。

この記事を読むメリット
  • ファイルを移動する2つの方法が分かります。
  • ファイル移動時の注意点や、エラーの回避方法についても解説します。
  • FileSystemObjectを使用したファイルの移動についても解説します。

前提

ファイルを移動には、以下2つの方法があります。

#メソッド/ステートメント説明
1Nameファイルの移動
2MoveFileSystemObjectを使用したファイル移動
ファイル移動 – メソッド/ステートメント
めい

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

基本情報

Nameステートメント

ファイルを移動するには、Nameステートメントを使用します。

Nameステートメントは名前を変更するためのステートメントですが、フルパスを指定することでファイルの移動も可能です。
本記事では、ファイル移動用のステートメントとしてご紹介します。

構文

Name oldname As newname

#項目名説明
1oldname移動前のファイルパス
2newname移動後のファイルパス
移動前と異なるファイル名を指定すると、ファイル名の変更が可能
Nameステートメント – 指定項目

以下の場合、エラーとなってしまいますのでご注意ください。
 1. ファイルが存在しない場合
 2. 移動後のフォルダが存在しない場合
 3. 移動先に同名のファイルが存在する場合

りゅう

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

Moveメソッド

FileSystemObjectを使ったファイル移動については、FileオブジェクトのMoveメソッドを使用します。

構文

構文

FileObject.Move destination

引数

#引数必須/任意説明
1destination必須移動先のフォルダパスを指定します
Moveメソッド – 引数

以下の場合、エラーとなってしまいますのでご注意ください。
 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を使用することにより、コーディングの幅が広がるのではないでしょうか。

この記事が、皆さまのお力になれば幸いです!

オススメの書籍
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA