エクセルVBAでフォルダをフォルダごと移動させる

エクセルでフォルダを移動させる時、手作業で移動させるのは面倒です。複数のフォルダを、指定した場所に移動させるとなると、分かりにくい場所への移動は、見つけるのに時間がかかって、意外と時間がかかることもあります。エクセルVBAを使うと、簡単にフォルダを移動できます。ここでは、MoveFolder メソッドを使って、フォルダを移動させています。MoveFolder メソッドを使うと、ワイルドカードを使って、複数のフォルダを移動させることもできます。フォルダ名を変更して、移動させることもできます。フォルダの大移動をしたい時には、便利です。一括で移動できるので、定期的に異動させる作業がある時は、大活躍します。

 

 

MoveFolder メソッド

MoveFolder メソッドは、フォルダを移動させる時に使います。

引数 Sourceのフォルダ名には、ワイルドカードが使用できますが、Destination には、ワイルドカードは使用できません。

ワイルドカードを使うと、複数のフォルダを移動することができます。

MoveFolder メソッドの構文 : Object.MoveFolder Source, Destination

Object   : FileSystemObject オブジェクトを指定します。

Source   : 移動するフォルダを指定します。

Destination : フォルダの移動先を指定します。

 

 

1つのフォルダを移動させる

エクセルVBAで、1つのフォルダを移動させるコードです。

フォルダの中のファイルも一緒に移動します。

「手数料」フォルダを、「改定」フォルダに移動させましょう。

Sub フォルダごと移動()
Dim fso As Object
Dim MFo As String
Dim IFo As String
Set fso = CreateObject(“Scripting.FileSystemObject”)
MFo = “D:\2018新規契約\手数料”
IFo = “D:\2018新規契約\改定\”
fso.MoveFolder MFo, IFo
Set fso = Nothing
End Sub

 

 

フォルダの名前を変更して移動

フォルダを移動させる時に、フォルダ名を変更して移動させるコードです。

「手数料」フォルダを、「改定」フォルダに、「改定手数料」と名前を変更して移動させましょう。

Sub フォルダの名前変更と移動()
Dim fso As Object
Dim MFo As String
Dim IFo As String
Set fso = CreateObject(“Scripting.FileSystemObject”)
MFo = “D:\2018新規契約\手数料”
IFo = “D:\2018新規契約\改定\改定手数料”
fso.MoveFolder MFo, IFo
Set fso = Nothing
End Sub

複数のフォルダを移動させる

MoveFolder メソッドにワイルドカードを使って、複数のフォルダを移動させましょう。

「2017年度契約」フォルダの中にある、全てのフォルダを、「新規契約」フォルダに移動させます。

Sub 複数のフォルダを移動()
Dim fso As Object
Dim MSfo As String
Dim RSfo As String
Set fso = CreateObject(“Scripting.FileSystemObject”)
MSfo = “D:\2017年度契約\*”
RSfo = “D:\2018年度契約\新規契約\”
fso.MoveFolder MSfo, RSfo
Set fso = Nothing
End Sub

フォルダ名の一部に、「2017」があるフォルダだけを移動させたい場合は、Source の指定を次のようにしましょう。

MSfo = “D:\2017年度契約\2017*”

「2017」で始まるフォルダが、全て移動されます。

 

 

指定したフォルダがない場合のエラー回避

MoveFolder メソッドでフォルダを移動させる時、指定したフォルダがないとエラーになってしまします。

エラーになった場合は、エラーを表示させないで、MsgBox で「フォルダを確認して下さい。」のメッセージを表示させましょう。

Sub フォルダ移動のエラー回避()
Dim fso As Object
Dim MFo As String
Dim IFo As String
Set fso = CreateObject(“Scripting.FileSystemObject”)
MFo = “D:\2018新規契約\手数料”
IFo = “D:\2018新規契約\改定\”
If Dir(“D:\2018新規契約\手数料”, vbDirectory) <> “” Then
fso.MoveFolder MFo, IFo
Set fso = Nothing
Else
MsgBox “フォルダを確認して下さい。”, vbInformation
End If
End Sub

色々なフォルダ移動ができるMoveFolder

エクセルVBAで、フォルダを移動させる方法は、MoveFolder 以外にもあります。MoveFolder メソッドの特徴は、ワイルドカードが使えることです。引数 Sourceのフォルダ名に、ワイルドカードを使用して、複数のフォルダを移動させたり、特定の文字列を含んだフォルダを、一括で移動させることができます。フォルダの整理や、期末に整備するときなどに、一括でフォルダを移動できるので、移動のVBAを作っておくと便利です。フォルダのパスを変更するだけで、使いまわしもできるので、色々なフォルダ移動ができます。

こちらの記事もご覧ください。⇒エクセルVBAで複数のファイルを移動する