フォルダを作成する #
VBAではMkDirステートメントを使用してフォルダを作成できます。
Cドライブの直下に「テストフォルダ」を作成したいときは以下のように入力します。
MkDir "C:\テストフォルダ"
MkDir
を使用する上で注意する点が2個あります。
MkDir
で指定したパスにフォルダが存在するときは「実行時エラー75:パス名が無効です。」と表示されます。MkDir実行前にフォルダが存在するか確認する必要があります。- 再帰的にフォルダを作成してくれません。たとえば「C:\テストフォルダ」がない状態で「C:\テストフォルダ\テストフォルダ1」を作成しようとすると 「実行時エラー76:パスが見つかりません。」と表示されます。
MkDir "C:\テストフォルダ\テストフォルダ1"
テストフォルダをCドライブの直下に作成した上で、その中にテストフォルダ1を作成する必要があります。
MkDir "C:\テストフォルダ"
MkDir "C:\テストフォルダ\テストフォルダ1"
フォルダが存在するか確認する #
VBAを使用して、指定したパスのフォルダの存在を確認してみます。 テストのため、C:\hasFolderに「folder1」という名前のフォルダを置きました。
Dir関数を使用する方法 #
VBAのDir
は特定のパスにあるファイルやフォルダを検索するために使用します。
指定された特定のパスにファイルやフォルダが存在する場合、Dir
はその名前を返します。
それ以外の場合は空の文字列を返します。
Dir
を使用してフォルダの存在を確認するコードは以下になります。
Option Explicit
Function HasFolder(folder_path As String) As Boolean
'###################################################################################
'指定したパスにフォルダが存在するか確認する
'-----------------------------------------------------------------------------------
'引数 :folder_path 存在を確認したいフォルダの絶対パス
'戻り値:folder_pathが存在する場合True,存在しない場合False
'###################################################################################
If Dir(folder_path, vbDirectory) = "" Then
HasFolder = False
Else
HasFolder = True
End If
End Function
HasFolder
を呼び出して、C:\hasFolder内の「folder1」フォルダと「folder2」フォルダが
それぞれ存在するか動作を確認してみます。
Option Explicit
Sub TestHasFolder()
MsgBox HasFolder("C:\hasFolder\folder1")
MsgBox HasFolder("C:\hasFolder\folder2")
End Sub</pre>
TestHasFolder
を実行してみるとfolder1は存在するので、True
と表示されます。
folder2は存在しないのでFalse
と表示されます。
FileSystemObjectのFolderExists関数を使用する方法 #
FileSystemObject
のFolderExists
を使用すると指定したパスにフォルダが存在するか判定することができます。
FolderExists
を使用してフォルダの存在を確認するコードは以下になります。
使用するには参照設定でMicrosoft Scripting Runtimeを選択しておく必要があります。
Function HasFolder2(folder_path) As Boolean
'###################################################################################
'指定したパスにフォルダが存在するか確認する
'参照設定でMicrosoft Scripting Runtimeを事前に選択してください
'-----------------------------------------------------------------------------------
'引数 :folder_path 存在を確認したいフォルダの絶対パス[String]
'戻り値:folder_pathが存在する場合True,存在しない場合False
'###################################################################################
Dim fso As FileSystemObject
Set fso = New FileSystemObject
If fso.FolderExists(folder_path) Then
HasFolder2 = True
GoTo Finally
End If
Finally:
Set fso = Nothing
End Function
HasFolder2
を呼び出して、C:\hasFolder内の「folder1」と「folder2」がそれぞれ存在するか確認してみると
Dir
と同じ結果になります。
Sub TestHasFolder2()
MsgBox HasFolder2("C:\hasFolder\folder1")
MsgBox HasFolder2("C:\hasFolder\folder2")
End Sub