今回は、「FileSystemObject」でファイルとフォルダを操作する7つの方法を18のひな形でご紹介します。
コードのひな形ですので、説明は極力省略します。
詳細については下記記事をご覧ください。
- FileSystemObjectでフォルダを作成
- FileSystemObjectでフォルダを削除
- FileSystemObjectでファイルを削除
- FileSystemObjectでフォルダを移動
- FileSystemObjectでファイルを移動
- FileSystemObjectでフォルダをコピー
- FileSystemObjectでファイルをコピー
1.FileSystemObjectの使い方
「FileSystemObject」オブジェクトは、ドライブ、フォルダ、ファイルなどを操作する事ができるオブジェクトです。
FileSystemObjectを使用するには「CreateObject」メソッドを使用して次のように記載します。
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FileSystemObjectのメソッド一覧です。
メソッド | 操作内容 |
BuildPath | パスの末尾に、指定したフォルダ名を追加したパスを返します |
CopyFile | ファイルをコピーします |
CopyFolder | フォルダをコピーします |
CreateFolder | 新しいフォルダを作成します |
CreateTextFile | 新しいテキストファイルを作成します |
DeleteFile | ファイルを削除します |
DeleteFolder | フォルダを削除します |
DriveExists | ドライブが存在するかどうか調べます |
FileExists | ファイルが存在するかどうか調べます |
FolderExists | フォルダが存在するかどうか調べます |
GetAbsolutePathName | 省略したパスから完全なパス名を返します |
GetBaseName | 拡張子を除いたファイルのベース名を返します |
GetDrive | 指定したDriveオブジェクトを返します |
GetDriveName | 指定したドライブの名前を返します |
GetExtensionName | ファイルの拡張子を返します |
GetFile | 指定したFileオブジェクトを返します |
GetFileName | 指定したファイルの名前を返します |
GetFolder | 指定したFolderオブジェクトを返します |
GetParentFolderName | 指定したフォルダの親フォルダを返します |
GetSpecialFolder | システムが使用する特別なフォルダのパスを返します |
GetTempName | 一時的なファイル名を生成します |
MoveFile | ファイルを移動します |
MoveFolder | フォルダを移動します |
OpenTextFile | 指定したTextStreamオブジェクトを返します |
2.フォルダを作成
書式は「FileSystemObject.CreateFolder(foldername)」と書きます。
【foldername】
作成するフォルダパスを指定します。
foldernameは省略する事ができません。
指定したフォルダパスが存在しない場合や、フォルダパスに使用できない文字列を使った場合は、エラーが発生します。
Sub Sample1()
Dim FSO As Object
Dim myFolder As String
Set FSO = CreateObject("Scripting.FileSystemObject")
myFolder = "C:\Sample" '新規作成するフォルダパス
'エラーを回避する
On Error GoTo ErrLabel
FSO.CreateFolder (myFolder)
Set FSO = Nothing
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
3.フォルダを削除
書式は「FileSystemObject.DeleteFolder folderspec[, force] 」と書きます。
【folderspec】
削除するフォルダパスを指定します。
ワイルドカードを使用する事ができます。
folderspecは省略する事ができません。
指定したフォルダが存在しない場合、エラーが発生します。
また、フォルダ内のファイルやサブフォルダも削除するため、開いているファイルや読み取り専用等、フォルダ内に削除できないファイルが存在した場合にも、エラーが発生します。
【force】
forceは読み取り専用ファイルの削除をTrue/Falseで指定します。
Trueを指定すると読み取り専用ファイルも削除可能です。
省略するとFalseを指定したことになり、読み取り専用ファイルは削除できません。
Falseを指定して読み取り専用ファイルが存在するとエラーとなります。
Sub Sample3()
Dim FSO As Object
Dim myFolder As String
Set FSO = CreateObject("Scripting.FileSystemObject")
myFolder = "C:\Sample\TEST1" '削除するフォルダパス
If Dir(myFolder, vbDirectory) = "" Then 'フォルダの存在チェック
MsgBox "フォルダが存在しません。"
Exit Sub
Else
'削除できないファイルのエラーを回避する
On Error GoTo ErrLabel
FSO.DeleteFolder myFolder 'フォルダ削除
End If
Set FSO = Nothing
Exit Sub
ErrLabel:
If Err.Number = 70 Then
MsgBox "削除できないファイルがあります。"
End If
End Sub
4.ファイルを削除
書式は「FileSystemObject.DeleteFile filespec[, force] 」と書きます。
【filespec】
削除するファイル名を指定します。
最後のパスの要素にのみ、ワイルドカードを使用する事ができます。
filespecは省略する事ができません。
指定したファイルが存在しない場合、エラーが発生します。
【force】
forceは読み取り専用ファイルの削除をTrue/Falseで指定します。
Trueを指定すると読み取り専用ファイルも削除可能です。
省略するとFalseを指定したことになり、読み取り専用ファイルは削除できません。
指定したファイルを削除する
FileSystemObject.FileExistsで存在を確認して削除する
Sub Sample4()
Dim FSO As Object
Dim FileName As String
Set FSO = CreateObject("Scripting.FileSystemObject")
FileName = "C:\Sample\Book100.xlsx"
If FSO.FileExists(FileName) Then
FSO.DeleteFile filespec:=FileName, force:=True
End If
End Sub
On Error GoToでエラーを回避して削除する
Sub Sample5()
Dim FSO As Object
Dim FileName As String
Set FSO = CreateObject("Scripting.FileSystemObject")
FileName = "C:\Sample\Book1.xlsx"
On Error GoTo ErrLabel
FSO.DeleteFile filespec:=FileName, force:=True
Exit Sub
ErrLabel:
End Sub
複数のファイルを削除する
Sub Sample6()
Dim FSO As Object
Dim FileName As String
Set FSO = CreateObject("Scripting.FileSystemObject")
FileName = "C:\Sample\Book*.xlsx"
On Error GoTo ErrLabel
FSO.DeleteFile filespec:=FileName, force:=True
Exit Sub
ErrLabel:
End Sub
5.フォルダを移動
移動元、移動先をフルパスで指定して移動する
Sub Sample7()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrLabel
FSO.MoveFolder Source:="C:\Sample1\TEST", Destination:="C:\Sample1\TEST1\"
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
移動時にフォルダ名を変更する
フォルダ名「TEST」を移動時に「Sample」に変更して移動します。
Sub Sample8()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrLabel
FSO.MoveFolder Source:="C:\Sample1\TEST", Destination:="C:\Sample1\TEST1\Sample"
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
ワイルドカードで複数フォルダを一括で移動する
フォルダ名にワイルドカードを使用する事で、一括でフォルダを移動する事ができます。
Sample1フォルダ内の「TEST」を含むフォルダをSampleというフォルダに移動します。
Sub Sample9()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrLabel
FSO.MoveFolder Source:="C:\Sample1\TEST*", Destination:="C:\Sample1\Sample\"
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
6.ファイルを移動
書式は「FileSystemObject.MoveFile source, destination」と書きます。
コピーと違い、引数に「overwrite」を指定する事はできません。
【source】
移動元のファイルパスを指定します。
ワイルドカードを使用する事ができます。
sourceは省略する事ができません。
指定したファイルが存在しない場合、エラーが発生します。
【destination】
移動先のフォルダパスとファイル名を指定します。
ワイルドカードを使用する事ができず、省略もできません。
また、ファイル名まで指定する事で、ファイル名を別名にして移動ができます。
移動元、移動先をフルパスで指定して移動する
Sub Sample10()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrLabel
FSO.MoveFile Source:="C:\Sample1\TEST\Book1.xlsx", Destination:="C:\Sample1\TEST1\"
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
移動時にファイル名を変更する
ファイル名「Book1.xlsx」を移動時に「Book2.xlsx」に変更して移動します。
Sub Sample11()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrLabel
FSO.MoveFile Source:="C:\Sample1\TEST\Book1.xlsx", Destination:="C:\Sample1\TEST1\Book2.xlsx"
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
ワイルドカードで複数ファイルを一括で移動する
ファイル名にワイルドカードを使用する事で、一括でファイルを移動する事ができます。
Sub Sample12()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrLabel
FSO.MoveFile Source:="C:\Sample1\TEST\*.xlsx", Destination:="C:\Sample1\TEST1\"
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
7.フォルダをコピー
書式は「FileSystemObject.CopyFolder source, destination[, overwrite]」と書きます。
【source】
コピー元のフォルダパスを指定します。
ワイルドカードを使用する事ができます。
sourceは省略する事ができません。
指定したフォルダが存在しない場合、エラーが発生します。
【destination】
コピー先のフォルダパスを指定します。
ワイルドカードを使用する事ができず、省略もできません。
コピー先フォルダパスをコピー元のフォルダパスと変更する事で、フォルダ名の変更が可能です。
【overwrite】
コピー先に同一フォルダが存在する場合に、True/Falseで上書きするか指定します。
Trueを指定すると上書きし、Falseを指定すると上書きしませんが、同じフォルダ名があるとエラーになります。
省略することが可能で、省略するとTrueが指定されます。
コピー元と異なるコピー先を指定してコピーする
Sub Sample13()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder Source:="C:\Sample1\TEST", Destination:="C:\Sample2\TEST"
Set FSO = Nothing
End Sub
フォルダ名を変更してコピーする
Sub Sample14()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder Source:="C:\Sample1\TEST", Destination:="C:\Sample1\TEST1"
Set FSO = Nothing
End Sub
複数のフォルダをコピーする
Sub Sample15()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder Source:="C:\Sample1\TEST*", Destination:="C:\Backup\"
Set FSO = Nothing
End Sub
エラーを回避する
Sub Sample16()
Dim FSO As Object
Dim myFolder As String
Set FSO = CreateObject("Scripting.FileSystemObject")
myFolder = "C:\Sample1\TEST"
If Dir(myFolder, vbDirectory) = "" Then 'ファイルの存在チェック
MsgBox "フォルダが存在しません。"
Else
'同一フォルダ名が存在する場合回避
On Error GoTo ErrLabel
FSO.CopyFolder Source:=myFolder, Destination:="C:\Sample1\TEST", overwritefiles:=False
End If
Set FSO = Nothing
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
8.ファイルをコピー
コピー元、コピー先をフルパスで指定してコピーするコード
Sub Sample17()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrLabel
FSO.CopyFile Source:="C:\Sample\Book1.xlsx", Destination:="C:\Sample\Book2.xlsx", overwritefiles:=False
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
カレントフォルダを指定してコピーするコード
Sub Sample18()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
With CreateObject("WScript.Shell")
.CurrentDirectory = "C:\Sample\"
End With
On Error GoTo ErrLabel
FSO.CopyFile Source:="Book1.xlsx", Destination:="Book2.xlsx", overwritefiles:=False
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub