Excel VBA

[Excel VBA]ファイルを他のフォルダに移動する方法(カンタン応用!)

2021年1月3日

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

 

 

困ってます
VBAを使用して、エクセルファイルをまとめて他のフォルダに移動させる方法はありますか?

 

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

 

ロンピー
本記事を、書いているRonpeeeは2021年で15年ほど実務においてVBAをつかっています。

最近でも、こちらのフォルダからあちらのフォルダにエクセルファイルを大量に移動したいな。ということがありました。

なかなか手作業では大変で、そんなときはVBAがカンタンに解決してくれます。

 

本記事は

VBAを使用し、ファイルを移動させる方法

を紹介します。

 

 

 

この方法が理解できると、

例えば、もしフォルダに5000個のファイルがあり、その中から10個必要なファイル移動させたいとします。 手作業ではかなり大変ですが、下記のVBAを使用すれば簡単に必要なファイルを移動することができます。

 

 

方法

  1. ファイルを移動させたいフォルダを準備。
  2. 移動先のフォルダを準備。
  3. エクセルのA列に移動させたいファイルを順番にならべる。
  4. ボタンに下記の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( sourcedestination) 

object:必ず指定。FileSystemObjectの名前。

source:必ず指定。ファイルのパス名。

destination:必ず指定。ファイルの移動先のパス名。

 

ExcelVBAをこれから学習したい方は、本サイトの無料学習もご活用ください。

VBA無料学習はこちらから

 

 

 

-Excel VBA
-,

Copyright© Ronpeee blog , 2023 All Rights Reserved.