【VBA】フォルダを操作する

概要

フォルダを作成する

VBAではMkDirステートメントを使用してフォルダを作成できます。

MkDirステートメント

Cドライブの直下に「テストフォルダ」を作成したいときは以下のように入力します。

1MkDir "C:\テストフォルダ"

MkDirを使用する上で注意する点が2個あります。

  • MkDirで指定したパスにフォルダが存在するときは「実行時エラー75:パス名が無効です。」と表示されます。MkDir実行前にフォルダが存在するか確認する必要があります。
  • 再帰的にフォルダを作成してくれません
    たとえば「C:\テストフォルダ」がない状態で「C:\テストフォルダ\テストフォルダ1」を作成しようとすると
    「実行時エラー76:パスが見つかりません。」と表示されます。
1MkDir "C:\テストフォルダ\テストフォルダ1"

テストフォルダをCドライブの直下に作成した上で、その中にテストフォルダ1を作成する必要があります。

1MkDir "C:\テストフォルダ"
2MkDir "C:\テストフォルダ\テストフォルダ1"</pre>

フォルダが存在するか確認する

VBAを使用して、指定したパスのフォルダの存在を確認してみます。

テストのため、C:\hasFolderに「folder1」という名前のフォルダを置きました。

Dir関数を使用する方法

VBAのDir関数は特定のパスにあるファイルやフォルダを検索するために使用します。
指定された特定のパスにファイルやフォルダが存在する場合、Dir関数はその名前を返します。
それ以外の場合は空の文字列を返します。

Dir関数を使用してフォルダの存在を確認するコードは以下になります。

 1Option Explicit
 2Function HasFolder(folder_path As String) As Boolean
 3'###################################################################################
 4'指定したパスにフォルダが存在するか確認する
 5'-----------------------------------------------------------------------------------
 6'引数  :folder_path   存在を確認したいフォルダの絶対パス
 7'戻り値:folder_pathが存在する場合True,存在しない場合False
 8'###################################################################################
 9
10  If Dir(folder_path, vbDirectory) = "" Then
11    HasFolder = False
12  Else
13    HasFolder = True
14  End If
15
16End Function

HasFolderを呼び出して、C:\hasFolder内の「folder1」フォルダと「folder2」フォルダが
それぞれ存在するか動作を確認してみます。

1Option Explicit
2Sub TestHasFolder()
3
4  MsgBox HasFolder("C:\hasFolder\folder1")
5  MsgBox HasFolder("C:\hasFolder\folder2")
6  
7End Sub</pre>

TestHasFolderを実行してみるとfolder1は存在するので、Trueと表示されます。

folder2は存在しないのでFalseと表示されます。

FileSystemObjectのFolderExists関数を使用する方法

FileSystemObjectのFolderExists関数を使用すると指定したパスにフォルダが存在するかどうかを
判定することができます。

FileSystemObjectのFolderExists関数を使用してフォルダの存在を確認するコードは以下になります。
使用するには参照設定でMicrosoft Scripting Runtimeを選択しておく必要があります。

 1Function HasFolder2(folder_path) As Boolean
 2'###################################################################################
 3'指定したパスにフォルダが存在するか確認する
 4'参照設定でMicrosoft Scripting Runtimeを事前に選択してください
 5'-----------------------------------------------------------------------------------
 6'引数  :folder_path   存在を確認したいフォルダの絶対パス[String]
 7'戻り値:folder_pathが存在する場合True,存在しない場合False
 8'###################################################################################
 9
10  Dim fso As FileSystemObject
11  Set fso = New FileSystemObject
12  
13  If fso.FolderExists(folder_path) Then
14    HasFolder2 = True
15    GoTo Finally
16  End If
17
18Finally:
19  Set fso = Nothing
20  
21End Function</pre>

HasFolder2を呼び出して、C:\hasFolder内の「folder1」と「folder2」がそれぞれ存在するか確認してみると
Dir関数と同じ結果になります。

1Sub TestHasFolder2()
2
3  MsgBox HasFolder2("C:\hasFolder\folder1")
4  MsgBox HasFolder2("C:\hasFolder\folder2")
5  
6End Sub

フォルダパスを取得する

https://kazusa-pg.com/vba-get-folder-path/

フォルダをエクスプローラーで開く

https://kazusa-pg.com/vba-open-folder-by-shell/

関連ページ