エクセルマクロで、ファイルを移動するVBAコードを記載しています。
このページのマクロコードは、コピペで使えます。
ぜひお試しください😉
ファイルを移動(Nameステートメント)
以下のマクロを実行すると、ファイルを移動します。
Sub ファイル移動()
Name "C:\Users\admin\Desktop\A\Book1.xlsx" As "C:\Users\admin\Desktop\B\Book1.xlsx"
End Sub
マクロ実行前
「Book1.xlsx」は フォルダA にあります。
マクロ実行後
「Book1.xlsx」を フォルダB に移動します。
【補足】
・フォルダA に「Book1.xlsx」が存在しない場合は、エラーが発生します
・フォルダB に すでに同名ファイル(Book1.xlsx)が存在する場合は、エラーが発生します
ファイルを移動(Nameステートメント 変数使用)
以下のマクロを実行すると、ファイルを移動します。
Sub ファイル移動()
Dim 元フォルダ As String
Dim 先フォルダ As String
Dim ファイル名 As String
'元のフォルダのパスを指定
元フォルダ = "C:\Users\admin\Desktop\A\"
'移動先のフォルダのパスを指定
先フォルダ = "C:\Users\admin\Desktop\B\"
'移動するファイル名を指定(元のフォルダに入っているファイルを指定)
ファイル名 = "Book1.xlsx"
' ファイルを移動する
Name 元フォルダ & ファイル名 As 先フォルダ & ファイル名
End Sub
マクロ実行前
「Book1.xlsx」は フォルダA にあります。
マクロ実行後
「Book1.xlsx」を フォルダB に移動します。
【補足】
・フォルダA に「Book1.xlsx」が存在しない場合は、エラーが発生します
・フォルダB に すでに同名ファイル(Book1.xlsx)が存在する場合は、エラーが発生します
ファイルを移動(Nameステートメント すべてのファイル)
以下のマクロを実行すると、フォルダ内のすべてのファイルを移動します。
Sub ファイル移動()
Dim 元フォルダ As String
Dim 先フォルダ As String
Dim ファイル名 As String
'元のフォルダのパスを指定
元フォルダ = "C:\Users\admin\Desktop\A\"
'移動先のフォルダのパスを指定
先フォルダ = "C:\Users\admin\Desktop\B\"
'元のフォルダ内のすべてのファイルを移動する
ファイル名 = Dir(元フォルダ & "*.*")
Do While ファイル名 <> ""
Name 元フォルダ & ファイル名 As 先フォルダ & ファイル名
ファイル名 = Dir
Loop
End Sub
マクロ実行前
フォルダAに、ファイルが複数存在しています。
マクロ実行後
フォルダAの全ファイルを フォルダBに移動します。
【補足】
・フォルダB に すでに同名ファイルが存在する場合は、エラーが発生します
ファイルを移動(FSO)
以下のマクロを実行すると、ファイルを移動します。
FileSystemObject(FSO)を利用することで、
ファイルやフォルダに対する様々な操作を行うことができます。
Sub ファイル移動()
Dim FSO As Object
Dim 元フォルダ As String
Dim 先フォルダ As String
Dim ファイル名 As String
' FileSystemObjectを作成
Set FSO = CreateObject("Scripting.FileSystemObject")
' 元のフォルダのパスを指定
元フォルダ = "C:\Users\admin\Desktop\A\"
' 移動先のフォルダのパスを指定
先フォルダ = "C:\Users\admin\Desktop\B\"
' 移動するファイル名を指定(元のフォルダに入っているファイルを指定)
ファイル名 = "Book1.xlsx"
' ファイルを移動する
FSO.MoveFile 元フォルダ & ファイル名, 先フォルダ & ファイル名
End Sub
マクロ実行前
「Book1.xlsx」は フォルダA にあります。
マクロ実行後
「Book1.xlsx」を フォルダB に移動します。
【補足】
・フォルダA に「Book1.xlsx」が存在しない場合は、エラーが発生します
・フォルダB に すでに同名ファイル(Book1.xlsx)が存在する場合は、エラーが発生します
ファイルを移動(FSO すべてのファイル)
以下のマクロを実行すると、フォルダ内にあるすべてのファイルを移動します。
Sub ファイル移動()
Dim FSO As Object
Dim 元フォルダ As String
Dim 先フォルダ As String
Dim ファイル As Object
' FileSystemObjectを作成
Set FSO = CreateObject("Scripting.FileSystemObject")
' 元のフォルダのパスを指定
元フォルダ = "C:\Users\admin\Desktop\A\"
' 移動先のフォルダのパスを指定
先フォルダ = "C:\Users\admin\Desktop\B\"
' フォルダA内のすべてのファイルを取得し、移動する
For Each ファイル In FSO.GetFolder(元フォルダ).Files
FSO.MoveFile ファイル.Path, 先フォルダ & FSO.GetFileName(ファイル.Path)
Next ファイル
End Sub
マクロ実行前
フォルダAに、ファイルが複数存在しています。
マクロ実行後
フォルダAの全ファイルを フォルダBに移動します。
【補足】
・フォルダB に すでに同名ファイルが存在する場合はエラー発生
ファイルを移動(FSO 拡張子を指定)
以下のマクロを実行すると、フォルダ内にある拡張子が「xlsx」のファイルを移動します。
Sub ファイル移動()
Dim FSO As Object
Dim 元フォルダ As String
Dim 先フォルダ As String
Dim ファイル As Object
' FileSystemObjectを作成
Set FSO = CreateObject("Scripting.FileSystemObject")
' 元のフォルダのパスを指定
元フォルダ = "C:\Users\admin\Desktop\A\"
' 移動先のフォルダのパスを指定
先フォルダ = "C:\Users\admin\Desktop\B\"
' フォルダA内のすべてのファイルを取得し、移動する
For Each ファイル In FSO.GetFolder(元フォルダ).Files
' ファイルの拡張子が「xlsx」の場合のみ移動する
If LCase(FSO.GetExtensionName(ファイル.Path)) = "xlsx" Then
FSO.MoveFile ファイル.Path, 先フォルダ & FSO.GetFileName(ファイル.Path)
End If
Next ファイル
End Sub
マクロ実行前
フォルダA に、ファイルが複数存在しています。
マクロ実行後
フォルダA の中で拡張子が「xlsx」のファイルだけ、フォルダBに移動します。
【補足】
・フォルダB に すでに同名ファイルが存在する場合は、エラーが発生します
ファイルを移動(FSO 今月のフォルダ)
以下のマクロを実行すると、現在の月のフォルダにファイルを移動します。
Sub ファイル移動()
Dim FSO As Object
Dim 元フォルダ As String
Dim 先フォルダ As String
Dim ファイル As Object
Dim 今月フォルダ As String
' FileSystemObjectを作成
Set FSO = CreateObject("Scripting.FileSystemObject")
' 元のフォルダのパスを指定
元フォルダ = "C:\Users\admin\Desktop\A\"
' 移動先のフォルダのパスを指定
先フォルダ = "C:\Users\admin\Desktop\B\"
' 今月のフォルダ名を取得(例:202306)
今月フォルダ = Year(Now) & Format(Month(Now), "00")
' 今月のフォルダが存在しない場合は作成する
If Not FSO.FolderExists(先フォルダ & 今月フォルダ) Then
FSO.CreateFolder (先フォルダ & 今月フォルダ)
End If
' 「フォルダA」内のすべてのファイルを取得し、移動する
For Each ファイル In FSO.GetFolder(元フォルダ).Files
FSO.MoveFile ファイル.Path, 先フォルダ & 今月フォルダ & "\" & FSO.GetFileName(ファイル.Path)
Next ファイル
End Sub
マクロ実行前
フォルダA に、ファイルが複数存在しています。
フォルダB には、年月のフォルダが入っています。
フォルダB の今月フォルダ(202306)は、空の状態です。
マクロ実行後
フォルダA の全ファイルを、フォルダB の 今月フォルダ(202306)に移動します。
フォルダB に今月フォルダが存在しない場合は、
自動で今月フォルダを作成して、ファイルを移動します。
【補足】
・フォルダB に すでに同名ファイルが存在する場合は、エラーが発生します
ファイルを移動(FSO CSVファイル)
以下のマクロを実行すると、CSVファイルだけ移動します。
Sub ファイル移動()
Dim FSO As Object
Dim 元フォルダ As String
Dim 先フォルダ As String
Dim サブフォルダ As Object
Dim ファイル As Object
' FileSystemObjectを作成
Set FSO = CreateObject("Scripting.FileSystemObject")
' 元のフォルダのパスを指定
元フォルダ = "C:\Users\admin\Desktop\A\"
' 移動先のフォルダのパスを指定
先フォルダ = "C:\Users\admin\Desktop\B\"
' フォルダA内の各フォルダに対して処理を実行
For Each サブフォルダ In FSO.GetFolder(元フォルダ).SubFolders
' サブフォルダ内のすべてのcsvファイルを取得し、移動する
For Each ファイル In FSO.GetFolder(サブフォルダ.Path).Files
If FSO.GetExtensionName(ファイル.Path) = "csv" Then
FSO.MoveFile ファイル.Path, 先フォルダ & FSO.GetFileName(ファイル.Path)
End If
Next ファイル
Next サブフォルダ
End Sub
マクロ実行前
フォルダA の中に、フォルダとファイルが複数存在しています。
フォルダB は、空の状態です。
マクロ実行後
フォルダA の各フォルダにある すべてのCSVファイルを、フォルダB に移動します。
フォルダB に、CSVファイルが入ります。
【補足】
・フォルダB に すでに同名ファイルが存在する場合は、エラーが発生します
この記事がお役に立ちますと幸いです。
「ExcelVBA自動化のすべて ~35の事例で課題解決力を身につける~」
業務改善コンサルタントが教える ビジネスの現場で役立つExcelVBAの知識を解説
基本的な解決法と、応用例も紹介しています!