Excel VBA(マクロ)で業務改善
作成スキルを修得しましょう
パチンコ業界に特化した内容です

フォルダの存在を調べる

例)Dドライブのフォルダ名「役職共有」に ホールコンデータ のフォルダが存在するかチェックする場合以下のようにします。

Sub フォルダ存在チェック()
  Dim FSO As Object

  Set FSO = CreateObject(“Scripting.FileSystemObject”)

  If FSO.FolderExists(“D:\役職共有\201908”) Then
    ’フォルダが存在する場合の処理
  Else
    ’フォルダが存在しない場合の処理
  End If
  Set FSO = Nothing
End Sub

解説

CreateObject(“Scripting.FileSystemObject”) を使用しています。
ファイルの存在を確認を調べる で使用したものと同じです)

Googleで「エクセル マクロ フォルダの存在」のキーワードで検索するとDir関数を使用した方法があります。フォルダ名を取得することもできます。

Dir関数を利用したのが以下になります。

Sub フォルダ存在チェック2()
  If Dir(“D:\役職共有\201908”, vbDirectory) <> “” Then
    ’フォルダが存在する場合の処理
  Else
    ’フォルダが存在しない場合の処理
  End If
End Sub

Dir関数を使用すると ファイル名を返します。
MsgBox Dir(“\\desktop1\役職共有\201908”, vbDirectory) を実行すると以下のようにファイル名が表示されます。

ファイルが存在しない場合 空白になります。これを利用してフォルダ名が空白ではない場合フォルダが存在する と判断しています。

こちらの方がコードはシンプルですが私はDir関数を利用したチェックは利用していません。
その理由は、共有フォルダでフォルダが存在しない場合にエラーになるからです。

例)
コンピュータ名「desktop1」に共有フォルダ名「役職共有」を作成します。このフォルダに「0120190801ZA.csv」をいれます。

Sub フォルダ存在チェック()
  If Dir(“\\desktop1\役職共有\201908”, vbDirectory) <> “” Then
    MsgBox “フォルダは存在します”
  Else
    MsgBox “フォルダは存在しません”
  End If
End Sub

こちらを実行すると以下のように想定した動きになります。

ではコードの共有フォルダ名を「役職の共有」と変更します。
If Dir(“\\desktop1\役職の共有\201908”, vbDirectory) <> “” Then
フォルダ「役職の共有」は存在しないため「フォルダは存在しません」と表示されなければなりません。
しかし実行すると以下のようにエラーになります。

Dir関数を利用したファイルの確認方法では、ネットワーク上では「実行時エラー」が発生します。
共有フォルダを設定しているPCやネットワークドライブの電源が入っていない、LANケーブルが抜けている、共有フォルダ名が異なっている などの場合にエラーが出てマクロが途中で止まってしまいます。
最初に解説しました「FileSystemObject」ではエラーは発生しません。

これらの事から「FileSystemObject」を使用するチェック方法をお勧めします。