Excel VBA FileSystemObject ファイル/フォルダ操作の7つの方法と18のひな形

ファイル/フォルダ操作

今回は、「FileSystemObject」でファイルとフォルダを操作する7つの方法を18のひな形でご紹介します。

コードのひな形ですので、説明は極力省略します。

詳細については下記記事をご覧ください。

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
タイトルとURLをコピーしました