このページでは以下のファイル移動メソッドについて説明します。
※1・・・ワイルドカードを使用することで複数のオブジェクトを同時に操作することが可能。
*(アスタリスク):任意の数(0以上)の文字を表します。
? (クエスチョン):任意の1文字を表します。
使い分けの判断基準
1つのファイルを移動させる場合
どちらのメソッドを使用しても機能的には同じになりますので、そのときの処理内容により判断します。通常、処理の途中でファイルオブジェクトを取得済みであれば file.Move、ファイルオブジェクトを取得していないのであれば fso.MoveFile を使用します。
複数のファイルを移動させる場合
fso.MoveFile を使用します。移動元のファイル群を上記ワイルドカードで表現する必要があります。ワイルドカードで表現できない場合は file.Move でファイルを1つずつ移動させるしかありません。
fso.MoveFileの使用方法
引数に移動元、移動先のファイルパスを指定してファイルの移動を行います。
引数名 | 省略 | 説明 |
---|---|---|
Source | × | 移動するファイルを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 ファイルパスは絶対パス、相対パスともに指定可能です。 |
Destination | × | 引数 Source で指定したファイルの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。 ファイル名まで指定することで、移動したファイルの名前を変更することができます。 ファイルパスは絶対パス、相対パスともに指定可能です。 |
引数 Source に指定したファイルが存在しない場合、エラーが発生します。また、引数 Destination に指定したファイルが既に存在する場合、エラーが発生します。
fso.MoveFileの使用例
1つのファイルを移動する
数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。 以下の例では vba フォルダ内にある test.txt を backup フォルダ内に移動します。
Sub sample_fs023_01()
Dim fso As Object 'ファイルシステムオブジェクト
Dim strSrc As String '移動元
Dim strDst As String '移動先
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'移動元ファイルパスの設定
strSrc = "C:¥Users¥xxx¥Desktop¥vba¥test.txt"
'移動先フォルダパスの設定
strDst = "C:¥Users¥xxx¥Desktop¥backup¥"
'ファイルの移動
fso.MoveFile strSrc, strDst
'オブジェクト変数のクリア
Set fso = Nothing
End Sub
1つのファイルを移動する(ファイル名変更あり)
引数 Destination に移動後のファイル名を指定します。以下の例では、vba フォルダ内にある test.txt を backup フォルダ内に移動し、さらに、ファイル名を test_130817.txt へ変更します。
Sub sample_fs023_02()
Dim fso As Object 'ファイルシステムオブジェクト
Dim strSrc As String '移動元
Dim strDst As String '移動先
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'移動元ファイルパスの設定
strSrc = "C:¥Users¥xxx¥Desktop¥vba¥test.txt"
'移動先ファイルパスの設定(ファイル名変更)
strDst = "C:¥Users¥xxx¥Desktop¥backup¥test_130817.txt"
'ファイルの移動
fso.MoveFile strSrc, strDst
'オブジェクト変数のクリア
Set fso = Nothing
End Sub
複数のファイルを1命令で移動する
引数 Source にワイルドカードを使用して移動したいファイル群を表現します。以下の例では、vba フォルダ内にあるテキストファイルをすべて backup フォルダ内へ移動します。
Sub sample_fs023_03()
Dim fso As Object 'ファイルシステムオブジェクト
Dim strSrc As String '移動元
Dim strDst As String '移動先
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'ワイルドカードを使用して移動元ファイルパスの設定
strSrc = "C:¥Users¥xxx¥Desktop¥vba¥*.txt"
'移動先フォルダパスの設定
strDst = "C:¥Users¥xxx¥Desktop¥backup¥"
'ファイルの移動
fso.MoveFile strSrc, strDst
'オブジェクト変数のクリア
Set fso = Nothing
End Sub
file.Moveの使用方法
ファイルオブジェクト内に移動元のファイルパス情報を持っているので、引数に指定するのは移動先のファイルパスのみです。 その他の使用方法は fso.MoveFile に同じです。
引数名 | 省略 | 説明 |
---|---|---|
Destination | × | ファイルの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。 ファイル名まで指定することで、移動したファイルの名前を変更することができます。 ファイルパスは絶対パス、相対パスともに指定可能です。 |
引数 Destination に指定したファイルが既に存在する場合、エラーが発生します。
file.Moveの使用例
1つのファイルを移動する
引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。以下の例では vba フォルダ内にある test.txt を backup フォルダ内に移動します。
Sub sample_fs023_04()
Dim fso As Object 'ファイルシステムオブジェクト
Dim fileObj As Object 'ファイルオブジェクト
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルオブジェクト取得
Set fileObj = fso.GetFile("C:¥Users¥xxx¥Desktop¥vba¥test.txt")
'ファイルの移動
fileObj.Move "C:¥Users¥xxx¥Desktop¥backup¥"
'オブジェクト変数のクリア
Set fso = Nothing
Set fileObj = Nothing
End Sub
1つのファイルを移動する(ファイル名変更あり)
引数 Destination に移動後のファイル名を指定します。以下の例では、vba フォルダ内にある test.txt を backup フォルダ内に移動し、さらに、ファイル名を test_130817.txt へ変更します。
Sub sample_fs023_05()
Dim fso As Object 'ファイルシステムオブジェクト
Dim fileObj As Object 'ファイルオブジェクト
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルオブジェクト取得
Set fileObj = fso.GetFile("C:¥Users¥xxx¥Desktop¥vba¥test.txt")
'ファイルの移動
fileObj.Move "C:¥Users¥xxx¥Desktop¥backup¥test_130817.txt"
'オブジェクト変数のクリア
Set fso = Nothing
Set fileObj = Nothing
End Sub
フォルダ内の複数ファイルを1つずつ移動する
指定されたフォルダ内のファイルのうち、Like演算子 を使用して、あるファイル名パターンにマッチするものだけを移動させる例です。以下の例では、ファイル名が”a”と4ケタの数字からなるテキストファイルを backup フォルダへ移動します。
Sub sample_fs023_06()
Dim fso As Object 'ファイルシステムオブジェクト
Dim folderObj As Object 'フォルダオブジェクト
Dim fileObj As Object 'ファイルオブジェクト
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'フォルダオブジェクト取得
Set folderObj = fso.GetFolder("C:¥Users¥xxx¥Desktop¥vba")
For Each fileObj In folderObj.Files
'ファイル名判定
If fileObj.Name Like "a####.txt" Then
'ファイルの移動
fileObj.Move "C:¥Users¥xxx¥Desktop¥backup¥"
End If
Next
'オブジェクト変数のクリア
Set fso = Nothing
Set folderObj = Nothing
Set fileObj = Nothing
End Sub
fso.GetFolder For Each…Next Like 演算子 Setステートメント
以下の2つの図はマクロ実行前のvbaフォルダとbackupフォルダの状態です。
上記サンプルマクロを実行すると、aから始まる数値4桁のテキストファイル2つがbackupフォルダに移動したことがわかります。