本記事はエクセル2019で動作確認を行っています。

このような疑問にお答えします。

最近でも、こちらのフォルダからあちらのフォルダにエクセルファイルを大量に移動したいな。ということがありました。
なかなか手作業では大変で、そんなときはVBAがカンタンに解決してくれます。
本記事は
VBAを使用し、ファイルを移動させる方法
を紹介します。
この方法が理解できると、
例えば、もしフォルダに5000個のファイルがあり、その中から10個必要なファイル移動させたいとします。 手作業ではかなり大変ですが、下記のVBAを使用すれば簡単に必要なファイルを移動することができます。
方法
- ファイルを移動させたいフォルダを準備。
- 移動先のフォルダを準備。
- エクセルのA列に移動させたいファイルを順番にならべる。
- ボタンに下記のVBAを登録し、押す。
となります。
各自の環境にあわせてVBAを修正する必要がありますのでご注意ください。
Option Explicit Sub move_folder() Const folderA = "C:\Users\folderA" '① Const folderB = "C:\Users\folderB" '② Dim i As Long Dim fileName As String Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") ‘③ Dim ws As Worksheet Set ws = ActiveSheet ‘④ Dim lastRow As Long lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row ‘⑤ For i = 1 To lastRow ‘⑥ If ws.Cells(i, 1).Value <> "" Then ‘⑦ fileName = ws.Cells(i, 1).Value & ".xlsx" ‘⑧ If fso.FileExists(folderA & "\" & fileName) = True Then ‘⑨ fso.moveFile folderA & "\" & fileName, folderB & "\" & filename ‘⑩ End If End If Next Set fso = Nothing ‘⑪ End Sub
解説
①元データフォルダの保存先アドレスを定数に設定する。
②移動先フォルダのアドレスを定数に設定する。
③CreateObject関数を使用し、外部ライブラリ(ActiveXオブジェクト)を使用する。
④setステートメントを使い、アクティブシートを変数に代入する。
⑤最終行を取得する。
⑥変数iが1から最終行まで動作を繰りかえす。
⑦A列の行が1から最終行まで空欄でなければ、If文に入る。
⑧該当の行の値を変数に代入する。
*今回は拡張子を除いた値をA列に記入しているので、「& ".xlsx"」 を追加している。
⑨もしfolderAのファイル名が存在したら、If文に入る。
⑩FileSystemObjectオブジェクトのmovefileメソッドを使用し、folderAからfolderBにファイルを移動させる。
⑪取得したオブジェクトを使い終わったら、オブジェクトを開放する。
VBAのコードは少し複雑に見えるかもしれませんが、実際にご自身で書いてみて、
動作確認をしていただけるとベンリさが分かるとおもいますよ。
ポイント
☆Constとは定数で変化しないものです。反対に変化するものは変数で、Dimを使用してください。
☆movefileメソッド :<構文> object.movefile( source, destination)
object:必ず指定。FileSystemObjectの名前。
source:必ず指定。ファイルのパス名。
destination:必ず指定。ファイルの移動先のパス名。
ExcelVBAをこれから学習したい方は、本サイトの無料学習もご活用ください。
VBA無料学習はこちらから