Excel VBA入門 | FileSystemObject-MoveFileメソッド(ファイルの移動)

Excel VBA入門

公開日:2017年5月27日

FileSystemObjectオブジェクトは、Windowsスクリプトテクノロジの1つであるScriptランタイムに属したオブジェクトです(Excel VBA上ではScriptingのメンバに位置づけされています)。

ここでは、ファイルを移動する方法としてFileSystemObjectオブジェクトのMoveFileメソッドを使用する方法を解説します。

FileSystemObject-DeleteFileメソッド(ファイルの移動)【Excel VBA入門】
目次

1.基本形

FSO.MoveFile FileName, Destination

変数説明
FSOFileSystemオブジェクト変数。FileSystemオブジェクトとして宣言して格納した変数です。
引数説明
FileName移動するファイル名。ファイルのパスを指定します。ワイルドカードの使用により、複数ファイルの指定が可能。
Destination移動先のパス(フォルダ、ドライブ、新規ファイル)を指定します。

2.使用例

次の例では、ダウンロードフォルダにあるTest.txtファイルをデスクトップ上に移動します。

Sub ファイルの移動()

Dim FSO As New FileSystemObject  '(1)
'変数名は自由に設定してください。

FSO.MoveFile "C:\Users\ユーザー名\Downloads\Test.txt", "C:\Users\ユーザー名\Desktop\Test.txt"   '(2)
'ユーザー名はあなたのPC環境に合わせて書き換えてください。

End Sub

【解説】

(1)Dim FSO As New FileSystemObject
→FileSystemObjectオブジェクトを使用する際のおまじないです。FileSystemObjectオブジェクト変数FSOの宣言と変数FSOにFileSystemObjectオブジェクトの参照への代入を同時に1行で行っています。

おまじないには事前バインディングと実行時バインディングがありますが、ここでは事前バインディングを使用しています。

なお、FileSystemObjextオブジェクトを使用する場合には前もって、参照設定で「Microsoft Scripting Runtime」を有効にしておきます。

※FileSystemObjectオブジェクトの設定は「Excel VBA入門 | FileSystemObjectオブジェクト(概要)」を参照ください。

(2)FSO.MoveFile "C:\Users\ユーザー名\Downloads\Test.txt", "C:\Users\ユーザー名\Desktop\"
→ダウンロードフォルダにあるTest.txtファイルをデスクトップ上に移動します。

パス情報はWindows環境であれば、大文字・小文字を区別しません。Test.txtをtEST.TXTと書いても動作します。

移動先パスである引数Destinationですが、今回は「"C:\Users\ユーザー名\Desktop\"」を指定しています。

移動元のファイル名をそのまま利用する場合には、最後は「\」となります。フォルダ名が最後ではないのでご注意ください。

移動する際にファイル名を変える場合、例えばTest2.txtとしたければ、引数Destinationには「"C:\Users\ユーザー名\Desktop\Test.txt"」とファイル名が最後になります。

パス情報の間違いやファイルが存在しない場合には、実行時エラーとなります(実行時エラー53)。

Excel VBA MoveFile

また、移動先に同じファイル名が既に存在する場合にも実行時エラーとなります(実行時エラー58)。

Excel VBA MoveFile

3.Nameステートメントを使用したプログラミングとの比較

ファイルを移動するだけであれば、Nameステートメントを使用すれば事足ります(FileCopyステートメント+Killステートメントでも同様にファイル移動させることができます)。FileSystemObjectオブジェクトを使用するまでもありません。

しかし、ファイルの移動以外にもファイル操作(削除、コピー、編集)やドライブ、フォルダ操作も行うプログラムを書く場合には、これら一連の操作が可能であるFileSystemObjectオブジェクトを採用した方がプログラミングしやすくなります。この場合には、ファイルの移動はMoveFileメソッドを使用した方がコードが見やすくなります。

また、Nameステートメントはワイルドカードを使用することができません。このようなケースではワイルドカードを使用できるMoveFileメソッドを利用した方が効率的です。