VBA|Dir関数で、ファイルがあるのに見つからないときの対処方法

エクセルVBA VBAでフォルダ・ファイルの操作



VBAでは、Dir関数を使ってフォルダ・ファイルの存在確認や一覧取得するときは少なくありません。

その際によくある質問に、「フォルダやファイルがあるはずなのに、なぜか見つからずにエラーになる」というものがあります。

今回は、Dir関数を使ったときに、フォルダ・ファイルが存在するはずなのに、なぜか見つからないというエラーの対処方法について徹底的に説明していきます。



Dir関数で、ファイルがあるのに見つからないときの対処方法

エラーの一例

Dir関数を使ったファイル検索では、ファイルがあるのに何故か見つからずにエラーが発生してしまうときがあります。

上記のような「実行時エラー”5″プロシージャの呼び出し、または引数が不正です。」や、「実行時エラー53ファイルが見つかりません」などが該当します。

それでは、ファイルが見つからない・エラー発生原因と対処方法についてお伝えします。

ファイルが見つからない原因

Dir関数を使ってファイルが見つからない原因は以下のことが考えられます。

  1. ファイル名が長いために認識できない
  2. 特殊なネットワークドライブになっている

以下にそれぞれの対処方法について説明します。

対処方法

ファイル名が長いために認識できない

Dir関数を使ってファイル・フォルダを検索する場合には、256バイトを超えるパス名を扱うことができません。

したがって、パス名を256バイト以下に設定することが解決方法になります。

具体的な文字数は、

  • 半角1文字 1バイト
  • 全角1文字 2バイト

ですので、256バイトは「半角256文字」、「全角128文字」となります。

もし、256バイト以下に変更することが難しい場合は、ファイルシステムオブジェクト(FileSystemObject)を使うことをおすすめします。

参考まで、ファイルシステムオブジェクト(FileSystemObject)を使ったフォルダ内のファイル名一覧を取得するサンプルコードを示します。

サンプルコード:

Sub FSOを使ったファイル取得()
    Dim myFSO As New FileSystemObject
    Dim myfolder As Folder
    Dim myfiles  As Files
    Dim myfile As File
    Dim i As Long
    Set myfolder = myFSO.GetFolder("C:\Users\Desktop\テストフォルダ")
    Set myfiles = myfolder.Files
    i = 2
    For Each myfile In myfiles
        Cells(i, 1).Value = myfile.Name
        i = i + 1
    Next
End Sub

実行結果:

フォルダ内のファイル名一覧を取得する

特殊なネットワークドライブになっている

特殊なネットワーク環境のために特殊文字を使うような名称になっている場合は、

「実行時エラー ’52’ ファイル名または番号が不正です。」等のエラーが発生します。

対処方法は、

  • ネットワークドライブの割り当てを行う
  • Dir関数ではなく、ファイルシステムオブジェクト(FileSystemObject)を使う

ということが挙げられます。

ファイルシステムオブジェクト(FileSystemObject)は、コンピュータのファイルシステムへのアクセスが提供されているため、Dir関数を使うよりも機能的に優れ、より多くの機能を使うことができます。

コメント

  1. […] […]

タイトルとURLをコピーしました