メインコンテンツへスキップ
【VBA】フォルダを操作する

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

·3 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。
目次

フォルダを作成する
#

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関数を使用する方法
#

FileSystemObjectFolderExistsを使用すると指定したパスにフォルダが存在するか判定することができます。

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

VBAで参照設定を行う
·1 分
Programming VBA
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

関連記事

VBAでファイルパスを取得する
··3 分
Programming VBA
【VBA】最終行と最終列を取得する
··3 分
Programming VBA
VBAでOption Explicitを書くべきか?
·2 分
Programming VBA