ファイル操作

【VBA】フォルダの存在を確認する方法

更新日:2024/01/18

VBAでフォルダが存在するかどうかを確認する方法をお伝えします。

 

フォルダの存在を確認する関数とメソッド

VBAでフォルダの存在を確認する方法は2つあります。

基本的には、1のDir関数を使用します。

2のFolderExistsメソッドは、FileSystemObjectオブジェクトを取得する必要があります。
FileSystemObjectオブジェクトを使って何らからの処理を行うとき、FolderExistsメソッドの使用を考慮するとよいでしょう。

 

Dir関数

Dir関数はVBAのファイル操作に関する関数の一つで、引数で指定したパスに一致するファイルやフォルダの名前を取得できます。

構文

Dir関数でフォルダーが存在するかどうかを確認するときは、次のような構文を使用します。

if Dir( folderPath , attributes ) <> "" Then
  ' 存在するときの処理
Else
  ' 存在しないときの処理
End If
  1. filePath: 存在確認するフォルダのパス
  2. attributes: 通常は定数vbDirectoryを指定する。
    隠しフォルダを確認するときは、vbDirectory + vbHidden を指定する。

使用例

Dir関数でのフォルダ存在確認例です。

Sub dirTest()
    Const folderPath = "C:\Users\xxx\Documents\folder"
    
    If Dir(folderPath, vbDirectory) <> "" Then
        Debug.Print "フォルダーは存在します"
    Else
        Debug.Print "フォルダーは存在しません"
    End If
End Sub

隠しフォルダを確認したいときは、次のように第二引数に vbDirectory + vbHidden を記述します。

Sub dirTest2()
    Const folderPath = "C:\Users\xxx\Documents\folder"
    
    If Dir(filePath, vbDirectory + vbHidden ) <> "" Then
        Debug.Print "フォルダーは存在します"
    Else
        Debug.Print "フォルダーは存在しません"
    End If
    
End Sub

ただし、上記の方法は通常フォルダーも存在するとして判定されます。
そのため、フォルダーが隠しフォルダーかどうかを判定できません。

隠しフォルダーかどうかの判定は、次のようにGetAttr関数を使用します。

Sub dirTest3()
    Const folderPath = "C:\Users\xxx\Documents\folder"
    
    If Dir(folderPath, vbDirectory + vbHidden) <> "" Then
        If GetAttr(folderPath) And vbHidden Then
            Debug.Print "ファイルは隠しフォルダーです"
        Else
            Debug.Print "ファイルは隠しフォルダーではありません"
        End If
    Else
        Debug.Print "フォルダーは存在しません"
    End If
    
End Sub

 

FolderExistsメソッド

FolderExistsメソッドは外部ライブラリのWindows Script Runtimeに含まれているFileSystemObjectオブジェクトのメンバーです。

FolderExistsメソッドを使用するには、まずはFileSystemObjectオブジェクトを取得する必要があります。

FileSystemObjectオブジェクトの取得方法は二つあります。
一つは、文字列"Scripting.FileSystemObject"をCreateObject関数に渡す方法です。

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

もう一つはVBエディタのメニュー:ツールから参照設定画面を開いて『Microsoft Scriptiong Runtime』を参照設定してから次のコードを実行する方法です。

Dim fso As New Scripting.FileSystemObject

参照設定をおこなうと、コード入力時にメソッド名候補が表示されます。
入力ミスを防げるので便利です。

構文

FileSystemObjectオブジェクト.FolderExists( FolderSpec )
  1. FolderSpec: フォルダーのパス
フォルダーが存在するときはTrue。存在しないときはFalse

FolderExistsは、隠しファイルかどうかに関係なく存在確認をおこないます。

使用例

FolderExistsメソッドの使用例です。

Sub folderExistsTest()
    Const folderPath = "C:\Users\xxx\Documents\folder"
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If fso.FolderExists(folderPath) Then
        Debug.Print "フォルダーは存在します"
    Else
        Debug.Print "フォルダーは存在しません"
    End If
    
End Sub

更新日:2024/01/18

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。