VBAのDir関数を使いこなす方法:ファイル名やパスの取得、ワイルドカードの活用

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
DIr関数について

「指定したフォルダ内のファイルをセルに表示させたい!!」
このように悩んだことはありませんか?


フォルダ内にある特定のファイルを取得したいけどどうするの?

・ファイルのパスを自動的に取得したい。

・ワイルドカードという言葉を聞いたことがあるけど、どう使うの?

その場合は、VBAの「Dir関数」を使用すると解決します!


この記事では、エクセルVBAのDir関数を使ってファイル名やパスを取得する方法や、
ワイルドカードを活用して複数のファイルを扱う方法を詳しく説明します。

Dir関数を使えば、指定フォルダ内のファイル名やパスを自動で取得できます。
また、ワイルドカードを使うことで特定の拡張子や名前に合うファイルだけといった条件で一覧表示することも可能です。

使用例はすべてコピペするだけで実際に使用できるようにしていますので、初心者でもすぐに実践可能です。
気になる部分だけでもぜひご覧いただければと思います。


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

「VBAを使ってExcelの作業を効率化したいけど、どの本から始めたらいいか迷っている…」
そんな悩みはありませんか?

初心者がつまずきやすいのは、「基礎をしっかり理解できる本選び」です。
最初につまずくと、VBAに苦手意識を持ってしまい、学習が続きませんよね。

そんな方におすすめなのが、初心者に寄り添い、丁寧に解説されたVBAの入門書です。

  • VBAの基礎を丁寧に、ゼロから分かりやすく解説
  • 具体的なサンプルコードで、実務ですぐに使えるスキルが身につく
  • 手元に置いて何度も確認できるため、挫折せずに学習を続けられる

動画で学ぶのもいいけど、まずはじっくり書籍で学びたい!という方には特におすすめです。

目次

この記事を見て「できるようになる」こと

この記事を読むことで、以下のことができるようになります。

スポンサーリンク

VBA Dir関数はどんなことができる?

Dir関数は、VBAで特定のフォルダ内にあるファイルやフォルダの名前を取得するために使われます。

指定したパス内のファイル名やフォルダ名を取得するのに非常に便利で、ワイルドカードを使用して条件に合った複数のファイルを検索することもできます。

例えば、「C:\サンプル」フォルダ内のすべてのファイル名を取得したい場合、Dir関数を使って一つ一つのファイル名を取り出し、後続の処理に使うことができます。
また、特定の拡張子(例えば.xlsxや.pdf)に絞って検索することも可能です。


Dir関数のイメージ

次項から、Dir関数の基本的な構文とその使用例を紹介します。

VBAの「Dir関数」の構成について徹底解説

VBAのDir関数は、ファイルやフォルダを検索する際に、次の2つの設定を使用します。

Dir関数の構成

Dir関数の構成
構成について解説
  • pathname ⇒ 省略可能
    • 検索対象のファイルまたはフォルダのパスを指定します。
      ワイルドカード ( * や ? ) を使用して特定のパターンに一致するファイルを検索することができます。
  • attributes ⇒ 省略可能
    • 検索するファイルの属性を指定します。
      たとえば、隠しファイルや読み取り専用ファイルなどを対象にすることができます。
      属性を指定しない場合、すべての通常ファイルが対象になります。

      ⇒ 詳細は「事項 : 引数「attributes」」で解説します。

より詳しい情報は、Microsoft公式 – Dir 関数を参照してみてください。

引数「attributes」の属性詳細

Dir関数で指定できる「attributes (ファイルの属性)」は以下の通りです。

これらの属性を組み合わせて、検索対象をさらに絞り込むことができます。

定数名説明
vbNormal0(既定値) 属性のないファイル。
vbReadOnly1属性のないファイルと読み取り専用のファイル。
vbHidden2属性のないファイルと隠しファイル。
vbSystem4属性のないファイルとシステムファイル。
Macintoshでは使用できません。
vbVolume8ボリュームラベル。他の属性を指定した場合は、vbVolumeは無視されます。
Macintoshでは使用できません。
vbDirectory16属性のないファイルとディレクトリまたはフォルダー。
vbAlias64指定されたファイル名はエイリアスです。
Macintoshでのみ使用できます。

VBA Dir関数で「ワイルドカード」の使い方を解説

Dir関数でファイル名を取得する際に便利なのが「ワイルドカード」です。
ワイルドカードを使うと、特定のパターンに一致するファイルをまとめて検索することができます。

以下に、よく使われるワイルドカードの種類とその使い方を紹介します。

ワイルドカードの種類

スクロールできます
ワイルドカード説明使用例
「*」 アスタリスク任意の文字列に一致*.xlsx
「?」 クエスチョンマーク任意の1文字に一致File?.txt

使用例1. ファイル名にワイルドカードを使用する場合

ファイル名にワイルドカードを使用すると、指定したフォルダ内でファイル名の一部に一致するものだけを取得できます。

例えば、ファイル名の最初が「Report」で始まるすべてのファイルを取得する場合は、以下のように記述します。

コード例 | ファイル名にワイルドカードを使用

Sub ListReportFiles()
    Dim filePath As String
    Dim fileName As String
    Dim i As Long

    filePath = "C:\サンプル\"
    fileName = Dir(filePath & "Report*.*") '// ファイル名の最初が「Report」のファイルを検索
    i = 1

    Do While fileName <> ""
        Cells(i, 1).Value = fileName
        fileName = Dir()
        i = i + 1
    Loop
End Sub

この例では、「Report1.xlsx」「Report_August.docx」など、ファイル名が「Report」で始まるファイルがすべて表示されます。

使用例2. 拡張子にワイルドカードを使用する場合

拡張子にワイルドカードを使うと、指定フォルダ内で任意の拡張子のファイルをすべて検索できます。

例えば、「xls」で始まる拡張子のファイル(.xls、.xlsx、.xlsmなど)を取得したい場合は、以下のように記述します。

コード例 | 拡張子にワイルドカードを使用

Sub ListExcelFiles()
    Dim filePath As String
    Dim fileName As String
    Dim i As Long

    filePath = "C:\サンプル\"
    fileName = Dir(filePath & "*.xls*") '// 拡張子がxlsで始まるすべてのファイルを検索
    i = 1

    Do While fileName <> ""
        Cells(i, 1).Value = fileName
        fileName = Dir()
        i = i + 1
    Loop
End Sub

このコードでは、フォルダ内の「.xls」「.xlsx」「.xlsm」など、拡張子が「xls」で始まるすべてのファイルが表示されます。
必要に応じて他の拡張子や特定のファイル形式も同様に設定できます。

このようにワイルドカードを使うことで、目的に合ったファイルを素早く一覧化でき、VBAでの作業が効率化されます。

VBAのDir関数を使用するにあたっての注意ポイント

VBAでDir関数を使用する場合、いくつかの注意点があります。
誤解しやすいポイントを理解しておくことで、エラーを防ぎ、スムーズに活用することができます。

注意ポイント1. フォルダパスの指定方法

Dir関数でフォルダパスを指定する際、以下のポイントに注意してください。

最後のバックスラッシュ

フォルダのパスを指定する際は、最後に必ずバックスラッシュ (バックスラッシュ)」を記述するのを忘れないようにしましょう。バックスラッシュがないと正しく動作しない場合があります。
※ワイルドカードの指定側に記載するのであれば、問題ありません。

Dim filePath As String

filePath = "C:\サンプル\"

バックスラッシュの表示について

フォルダのパスを「フォルダパス」と記述していますが、一部のパソコンでは「バックスラッシュ (バックスラッシュ)」を入力しても「円マーク」と表示されてしまう場合があります。
その場合円マーク」のままで正常に動作します。

注意ポイント2. Dir関数の動作について

Dir関数は特殊な挙動を持つため、以下の点に注意してください。

1回目と2回目以降の呼び出しの違い

Dir関数は1回目の呼び出しで指定されたファイルを取得しますが、2回目以降の呼び出しでは引数なしで実行する必要があります。

Dim filePath As String
Dim fileName As String

filePath = "C:\サンプル\"
fileName = Dir(filePath & "*.xlsx") '// 1回目の呼び出し
Do While fileName <> ""
    Debug.Print fileName
    fileName = Dir() '// 2回目以降の呼び出し
Loop

複数のフォルダ検索は不可

Dir関数は1回のプロセス内で1つのディレクトリ検索のみに対応しています。

異なるフォルダを検索したい場合は、最初の検索が完了してからDir関数を再度呼び出す必要があります。

注意ポイント3. ファイルの変更が反映されない

Dir関数で取得したファイル情報は、取得時点で存在していたものに基づきます。
そのため、検索後にファイルが削除されたり追加された場合、その変更は反映されません。
最新の状態を取得したい場合は、再度Dir関数を実行してください。

具体例:正しいフォルダパスとワイルドカードの使用

以下のコードは、フォルダパスの記述とワイルドカードの使用方法を正しく示しています。

Sub ExampleDirFunction()
    Dim filePath As String
    Dim fileName As String

    '// フォルダパスの最後にバックスラッシュを付ける
    filePath = "C:\サンプル\"

    '// .xlsx形式のファイルを取得
    fileName = Dir(filePath & "*.xlsx")

    '// ファイル名をイミディエイトウィンドウに表示
    Do While fileName <> ""
        Debug.Print fileName
        fileName = Dir() '// 次のファイルを取得
    Loop
End Sub
スポンサーリンク

VBAのDir関数の使用例をご紹介

それではDir関数の使用例について解説します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。


ここでは、次のフォルダ内のデータを使用して解説しますね。

このフォルダを使用して解説します。

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

使用例1: 指定したフォルダの最初のファイル名を取得する

指定したフォルダの最初のファイル名を取得するには、Dir関数のみを使用します。

Dir関数を使い、フォルダ内の全ファイルを対象に最初の1件をピックアップするシンプルな処理です。

コード例 | 指定したフォルダの最初のファイル名を取得

Sub GetFirstFileName()
    Dim filePath As String
    Dim fileName As String

    filePath = "C:\サンプル\"
    fileName = Dir(filePath & "*.*")

    Debug.Print fileName
End Sub

処理結果

使用例1の結果です。

コードの動作概要

STEP
フォルダパスを変数に格納

指定したフォルダ(例: “C:\サンプル\”)のパスを変数「filePath」に保存します。

STEP
Dir関数で最初のファイル名を取得

Dir関数を使って、指定したフォルダ内の最初のファイル名を取得し、それを変数「fileName」に格納します。

STEP
ファイル名を出力

取得したファイル名をDebug.Printを使って出力し、イミディエイトウィンドウに表示します。

このコードで使用している機能

スクロールできます
機能説明
Dim (変数)変数を宣言するために使用します。
ここでは、filePath(フォルダパス)とfileName(ファイル名)を文字列型で宣言しています。
Debug.Print (デバッグ)デバッグ用の出力コマンドです。
取得したファイル名をイミディエイトウィンドウに表示します。

1行ずつコードを解説

「クリック」してコードの詳細解説を見る

 Dir関数の構成解説

Dir関数の構成
  1. pathname ⇒ filePath & “*.*”
    • pathname は 「Dir関数」に渡される最初の引数で、検索対象のファイルまたはフォルダのパスを示します。
       “*.*” はワイルドカードで、ディレクトリ内のすべてのファイルを意味します。
      最初の「*」は「任意の文字列」を表し、「.*」は「任意の拡張子」を意味します
      つまり、フォルダ内の拡張子に関係なく全てのファイルを検索する指示を出しているということです。
  2. attributes ⇒ 省略
    • 今回、属性は何も指定していません
      全てのファイルを検索します。

■ コードの解説

  1. Sub GetFirstFileName()
    • ここでは、Subステートメントを使用して新しいプロシージャ(サブルーチン)を定義しています。
      このプロシージャの名前は GetFirstFileName です。
  2. Dim filePath As String
    • この行では、新しい変数「filePath」を宣言しています。
      「filePath」 は「文字列型(String)」の変数として宣言されています。
      この変数は、後の行でファイルパス(フォルダの場所)を格納するために使われます。
  3. Dim fileName As String
    • この行では、もう一つの変数「fileName」を文字列型(String)として宣言しています。
      この変数は、Dir関数で取得したファイル名を格納するために使用されます。
  4. filePath = “C:\サンプル\”
    • ここでは、変数「filePath」にフォルダのパスが代入されています
      この例では、”C:\サンプル\” というフォルダが指定されています。

      このパスは、Dir関数で検索対象とするフォルダを示しています。
      Windowsのファイルシステムでは、ディレクトリの区切りには「\(バックスラッシュ)」を使用します。
  5. fileName = Dir(filePath & “*.*”)
    • ここでは、Dir関数を使用して指定したフォルダ内の最初のファイル名を取得しています。
      「filePath & “*.*”」という表記により、変数「filePath」の値( “C:\サンプル\” )にワイルドカード「”*.*”」が追加されます。
      ワイルドカード 「”*.*”」は、フォルダ内のすべてのファイルを意味し、拡張子にかかわらずフォルダ内の全ファイルを検索対象にします。

      例えば、”C:\サンプル\” フォルダ内に、”サンプル1.xlsx” というファイルが最初にあれば、この最初にあるファイル名が取得され、変数「fileName」に代入されます。
  6. Debug.Print fileName
    • Debug.Printは、VBAのイミディエイトウィンドウにデータを出力するためのコマンドです。
      通常、デバッグ目的で使用されます。
      変数「fileName」に格納されているファイル名をイミディエイトウィンドウに表示します。
  7. End Sub
    • ここで、Subステートメントで始まったサブルーチンが終了します。

総括・ポイント

このコードを実行すると、指定されたフォルダ内の最初のファイル名を取得し、Debug.Printで表示することができます。

使用例2: フォルダ内のすべてのファイル名を取得する(隠しファイル等は除く)

フォルダ内のすべてのファイル名を取得するには、Dir関数をDo Whileループと組み合わせます。

隠しファイルや読み取り専用ファイルは対象外です。
Dir関数とDo Whileループを組み合わせることで、フォルダ内の複数のファイルを処理しています。

コード例 | すべてのファイル名を取得

Sub GetAllFiles()
    Dim filePath As String
    Dim fileName As String

    filePath = "C:\サンプル\"
    fileName = Dir(filePath & "*.*")

    Do While fileName <> ""
        Debug.Print fileName
        fileName = Dir()
    Loop
End Sub

処理結果

使用例2の結果です。

コードの動作概要

STEP
フォルダパスを変数に格納

指定したフォルダ(例: “C:\サンプル\”)のパスを変数「filePath」に保存します。

STEP
Dir関数で最初のファイル名を取得

Dir関数を使って、指定したフォルダ内の最初のファイル名を取得し、それをfileNameに格納します。

STEP
ループ処理でファイル名を順次取得

Do Whileループを使用して、フォルダ内のすべてのファイルを1つずつ取得し、Debug.Printで表示します。
ファイル名が空になるまで繰り返し実行されます。

STEP
次のファイル名を取得

ループ内でDir関数を再度呼び出し、次のファイル名を取得して処理を続けます。

このコードで使用している機能

スクロールできます
機能説明
Dim (変数)変数を宣言するための構文です。
ここでは、filePath(フォルダパス)とfileName(ファイル名)を文字列型で宣言しています。
Do While文 (繰り返し)条件が真(True)の間、繰り返し処理を実行するループ構文です。
ここでは、fileNameが空でない限りファイル名を順次取得します。
Debug.Print (デバッグ)デバッグ用の出力コマンドです。
取得したファイル名をイミディエイトウィンドウに表示します。

1行ずつコードを解説

「クリック」してコードの詳細解説を見る

 Dir関数の構成解説

Dir関数の構成
  1. pathname ⇒ filePath & “*.*”
    • ファイルパス「C:\サンプル\*.*」のファイルを検索しています
      ※「*」はワイルドカードといい、どんな文字でも構わないという意味です。
  2. attributes ⇒ 省略
    • 今回、属性は何も指定していません。
      全てのファイルを検索します。

■ コードの解説

  1. Sub GetAllFiles()
    • この行では、新しいサブルーチン GetAllFiles が定義されています。
      Subステートメントは「Subroutine(サブルーチン)」を意味し、一連の処理をまとめたブロックを作成します。
  2. Dim filePath As String
    • ここでは、「filePath」という文字列型(String)の変数を宣言しています。
  3. Dim fileName As String
    • この行では、「fileName」という文字列型(String)の変数を宣言しています。
  4. filePath = “C:\サンプル\”
    • こでは、変数「filePath」にフォルダのパス(”C:\サンプル\”)が代入されています。
      このパスはWindowsのディレクトリ構造に基づいて指定されており、検索対象となるフォルダを指定します。
  5. fileName = Dir(filePath & “*.*”)
    • Dir関数を使用して、変数「filePath」に指定されたフォルダ内の最初のファイル名を取得し、変数「fileName」に格納します。
      「filePath & “*.*”」の部分は、変数「filePath」に格納されたパス(例: “C:\サンプル\”)とワイルドカード「 “*.*”」 を連結したものです。
      ワイルドカード「”*.*”」は、フォルダ内のすべてのファイルを検索するために使用されます。
      「*」 は任意の文字列を意味し、「. *」は任意の拡張子を意味します。
      この行の実行によって、指定されたフォルダ内で最初に見つかったファイルの名前が変数「fileName」 に代入されます。
      たとえば、フォルダ内に「サンプル1.xlsx」というファイルがあれば、それが変数「fileName」に格納されます。
  6. Do While fileName <> “”
    • ここでは、Do Whileループが開始されます。
      このループは、変数「fileName」が空(””)でない限り繰り返されます。
      言い換えれば、変数「fileName」にファイル名が格納されている限りループが続きます。
      初回の「Dir関数」で最初のファイル名が取得され、以降のファイル名が順次取得されていく間、このループが実行され続けます。
      フォルダ内のすべてのファイルが処理され、Dir関数が空の文字列を返した時点でループは終了します。
  7. Debug.Print fileName
    • Debug.Printは、VBAのイミディエイトウィンドウにデータを出力するためのコマンドです。
      通常、デバッグ目的で使用されます。
      変数「fileName」に格納されているファイル名をイミディエイトウィンドウに表示します。
  8. fileName = Dir()
    • ここで再び「Dir関数」が呼び出されています。
      2回目以降の「Dir関数」の呼び出しでは引数を省略
      します。
      これにより、前回の Dir 呼び出しと同じフォルダ内で次のファイル名を取得することができます。
      たとえば、前回の「Dir関数」で「サンプル1.xlsx」が取得された場合、次の呼び出しで「サンプル2.xlsx」など別のファイル名が取得され、再び変数「fileName」に格納されます。
      このプロセスがフォルダ内のすべてのファイルが取得されるまで繰り返されます。
  9. Loop
    • この行は、Do Whileループの終わりを示します。
      ループの最後に到達すると、再び Do While の条件に戻り、変数「fileName」 が空でない限りループが継続されます。
      ループの中では、ファイル名を出力し、次のファイル名を取得する処理が繰り返されます。
      すべてのファイル名が処理されると、「Dir関数」が空文字列を返し、ループが終了します。
  10. End Sub
    • ここで、Subステートメントで始まったサブルーチンが終了します。

総括・ポイント

このループは、フォルダ内のすべてのファイル名を取得し、Debug.Printで出力することができます。
「サンプル3.xlsx」は、隠しファイルであるため取得できません。

使用例3: フォルダ内のすべてのファイル名を取得する(隠しファイル等も含む)

隠しファイルや読み取り専用ファイルなど、特定の属性を持つファイルを含むすべてのファイルを取得するには、Dir関数の属性を指定を行います。

コード例 | すべてのファイル名を取得する(隠しファイル等も含む)

Sub GetFilesWithAttributes()
    Dim filePath As String
    Dim fileName As String

    filePath = "C:\サンプル\"
    fileName = Dir(filePath & "*.*", vbHidden Or vbReadOnly)

    Do While fileName <> ""
        Debug.Print fileName
        fileName = Dir()
    Loop
End Sub

処理結果

使用例3の結果です。

コードの動作概要

STEP
フォルダパスを変数に格納

指定したフォルダ(例: “C:\サンプル\”)のパスを変数「filePath」に保存します。

STEP
Dir関数で最初のファイル名を取得

Dir関数を使って、隠しファイルや読み取り専用ファイルも含めたフォルダ内の最初のファイル名を取得し、変数「fileName」に格納します。

STEP
ループ処理でファイル名を順次取得

Do Whileループを使用して、フォルダ内のすべてのファイルを1つずつ取得し、Debug.Printで表示します。
ファイル名が空になるまで繰り返し実行されます。

STEP
次のファイル名を取得

ループ内で再度Dir関数を呼び出し、次のファイル名を取得して処理を続けます。
隠しファイルや読み取り専用ファイルも含めてすべて取得されるまで、このプロセスを繰り返します。

このコードで使用している機能

スクロールできます
機能説明
Dim (変数)変数を宣言するための構文です。
ここでは、filePath(フォルダパス)とfileName(ファイル名)を文字列型で宣言しています。
Do While文 (繰り返し)条件が真(True)の間、繰り返し処理を実行するループ構文です。
ここでは、fileNameが空でない限りファイル名を順次取得します。
Debug.Print (デバッグ)デバッグ用の出力コマンドです。
取得したファイル名をイミディエイトウィンドウに表示します。
Dir関数 (属性指定)隠しファイルや読み取り専用ファイルなど、特定の属性を指定してフォルダ内のファイルを検索します。
指定した属性に該当するすべてのファイルを取得できます。

1行ずつコードを解説

「クリック」してコードの詳細解説を見る

 Dir関数の構成解説

Dir関数の構成
  1. pathname ⇒ filePath & “*.*”
    • ファイルパス「C:\サンプル\*.*」のファイルを検索しています。
      ※「*」はワイルドカードといい、どんな文字でも構わないという意味です。
  2. attributes ⇒ vbHidden Or vbReadOnly
    • vbHidden「属性のないファイルと隠しファイル」
      vbReadOnly「属性のないファイルと読み取り専用のファイル」

      この2つを含む、全てのファイルを検索します。
      また、複数指定したい場合は「Or」を使用することもできます。
      ⇒ もう一度、属性について確認したい方は、「attributes」を参照

■ コードの解説

  1. Sub GetFilesWithAttributes()
    • ここでは、GetFilesWithAttributes というサブルーチンが定義されています。
      Sub ステートメントを使用して、一連の操作をまとめた処理を記述します。
  2. Dim filePath As String
    • この行では、「filePath」という文字列型(String)の変数が宣言されています。
  3. Dim fileName As String
    • ここでは、変数「fileName」という文字列型(String)の変数が宣言されています。
      変数「fileName」は、Dir関数を使用して取得したファイル名を一時的に格納します。
      ファイル名は順次この変数に格納され、ループの中で処理されます。
  4. filePath = “C:\サンプル\”
    • この行では、変数「filePath」に「C:\サンプル\」という具体的なフォルダのパスが代入されています。
      Windowsのファイルシステムの「Cドライブ」にある「サンプル」フォルダを指しています。
  5. fileName = Dir(filePath & “*.*”, vbHidden Or vbReadOnly)
    • この行では、「Dir関数」を使用して、変数「filePath」 で指定されたフォルダ内のファイルを検索します。
      ここで検索されるファイルは、特定の属性を持つファイル(隠しファイルや読み取り専用ファイル)です。

      「filePath & “*.*”」これは、変数「filePath」 (例:”C:\サンプル\”)とワイルドカード「”*.*”」を連結した文字列です。
      「”*.*”」は、フォルダ内のすべてのファイルを検索対象にするワイルドカードです。
      つまり、フォルダ内のすべてのファイルが検索の対象になります。

      「vbHidden Or vbReadOnly」ここで指定しているのは、検索するファイルの属性です。
      vbHidden は「隠しファイル」を意味し、vbReadOnly は「読み取り専用ファイル」を意味します。
      Or 演算子を使ってこれらを組み合わせることで、隠しファイルまたは読み取り専用ファイル(またはその両方)のいずれかに該当するファイルを検索対象にします。
      この行の実行により、指定された属性に一致する最初のファイル名が、変数「fileName」に格納されます。
  6. Do While fileName <> “”
    • ここでは Do Whileループが開始されます。
      このループは、変数「fileName」にファイル名が格納されている限り繰り返されます
      もし、変数「fileName」が空白(””)の場合、ループは終了します。
      初回のDir関数で取得された最初のファイル名が変数「fileName」に格納され、次に他のファイル名が順次取得されていきます。
      このループは、フォルダ内のすべてのファイルが取得されるまで続きます。
  7. Debug.Print fileName
    • この行では、変数「fileName」に格納されたファイル名をデバッグウィンドウに出力しています。
      Debug.Print は、VBAのデバッグ機能であり、コードの実行中に変数の値を確認したり、出力を記録するために使用します。
  8. fileName = Dir()
    • Dir関数が再び呼び出されています。
      2回目以降の呼び出しでは引数を省略し、前回の検索結果に続く次のファイル名を取得します。
      変数「fileName」に次のファイル名が格納されます。
      これにより、ループ内で次々にファイル名が取得されて処理されていきます。
      フォルダ内のすべての隠しファイルや読み取り専用ファイルが取得されるまで、この処理が繰り返されます。
  9. Loop
    • この行は Do While ループの終わりを示します。
      ループがここに到達すると、再び Do While の条件に戻り、fileName が空白でない限りループを続けます
      すべてのファイルが処理されると、「Dir関数」が空の文字列を返し、ループが終了します。
  10. End Sub
    • ここで、Subステートメントで始まったサブルーチンが終了します。

総括・ポイント

このループは、フォルダ内のすべてのファイル名を取得し、Debug.Printで出力することができます。
隠しファイルである「サンプル3.xlsx」も、取得することができました。

使用例4: 拡張子を指定しファイルを取得する

特定のファイル(例えば、拡張子「.xlsx」のみ)を検索するには、Dir関数で拡張子を指定します。

コード例 | 拡張子を指定しファイルを取得

Sub GetExcelFiles()
    Dim filePath As String
    Dim fileName As String

    filePath = "C:\サンプル\"
    fileName = Dir(filePath & "*.xlsx")

    Do While fileName <> ""
        Debug.Print fileName
        fileName = Dir()
    Loop
End Sub

処理結果

使用例4の結果です。

コードの動作概要

STEP
フォルダパスを変数に格納

指定したフォルダ(例: “C:\サンプル\”)のパスを変数「filePath」に保存します。

STEP
Dir関数で最初のファイル名を取得

Dir関数を使って、フォルダ内の最初のExcelファイル(拡張子.xlsx)の名前を取得し、それを変数「fileName」に格納します。

STEP
ループ処理でExcelファイル名を順次取得

Do Whileループを使用して、フォルダ内のすべてのExcelファイル名を1つずつ取得し、Debug.Printで表示します。
ファイル名が空になるまで繰り返し実行されます。

STEP
次のExcelファイル名を取得

ループ内で再度Dir関数を呼び出し、次のExcelファイル名を取得して処理を続けます。
フォルダ内のすべてのExcelファイルが取得されるまで、このプロセスを繰り返します。

このコードで使用している機能

スクロールできます
機能説明
Dim (変数)変数を宣言するための構文です。
ここでは、filePath(フォルダパス)とfileName(ファイル名)を文字列型で宣言しています。
Do While文 (繰り返し)条件が真(True)の間、繰り返し処理を実行するループ構文です。
ここでは、fileNameが空でない限りファイル名を順次取得します。
Debug.Print (デバッグ)デバッグ用の出力コマンドです。
取得したExcelファイル名をイミディエイトウィンドウに表示します。
Dir関数 (拡張子指定)特定の拡張子(例:.xlsx)を指定してフォルダ内のファイルを検索します。
この例ではExcelファイルのみを対象にしています。

1行ずつコードを解説

「クリック」してコードの詳細解説を見る

 Dir関数の構成解説

Dir関数の構成
  1. pathname ⇒ filePath & “*.*”
    • ファイルパス「C:\サンプル\*.*」のファイルを検索しています。
      ※「*」はワイルドカードといい、どんな文字でも構わないという意味です。
  2. attributes ⇒ 省略
    • 今回、属性は何も指定していません。
      全てのファイルを検索します。

■ コードの解説

  1. Sub GetExcelFiles()
    • この行では、新しいサブルーチン GetExcelFiles が定義されています。
  2. Dim filePath As String
    • この行では、「filePath」という文字列型(String)の変数を宣言しています。
  3. Dim fileName As String
    • この行では、「fileName」という文字列型(String)の変数を宣言しています。
  4. filePath = “C:\サンプル\”
    • この行では、変数「filePath」に 「C:\サンプル\」というフォルダパスが代入されています。
      このフォルダがDir 関数によって検索される対象となります。
  5. fileName = Dir(filePath & “*.xlsx”)
    • この行では、Dir 関数を使用して指定されたフォルダ内の最初のExcelファイル(拡張子が .xlsx)を検索し、そのファイル名を変数「fileName」に格納します。

      「filePath & “*.xlsx”」ここでは、変数「filePath」に格納されたフォルダパス(例: “C:\サンプル\”)に 「*.xlsx」というワイルドカードを追加しています。
      このワイルドカード 「*.xlsx」は、Excelファイル(拡張子が .xlsx)を意味します。
      この指定により、フォルダ内の .xlsx 拡張子を持つファイルのみが検索されます。
      例えば、フォルダ内に “サンプル1.xlsx” というファイルが存在していれば、それが最初に検索され、変数「fileName」に格納されます。
  6. Do While fileName <> “”
    • ここでは、Do While ループが定義されています。
      fileName 変数にファイル名が格納されている間、このループが繰り返し実行されます。
      もし、変数「fileName」が空白(””)の場合、ループは終了します。
      初回の Dir 関数で取得された最初のExcelファイル名が変数「fileName」に格納されており、このループ内で次々にファイル名が処理されます。
  7. Debug.Print fileName
    • 変数「fileName」に格納されているExcelファイル名をデバッグウィンドウに出力します。
      Debug.Print は、デバッグ目的で使用されるコマンドで、イミディエイトウィンドウに出力が表示されます。
  8. fileName = Dir()
    • この行で再び Dir 関数が呼び出されます。
      2回目以降の Dir 関数の呼び出しでは、引数なしで前回の検索結果に続く次のExcelファイル名を取得
      します。
      これにより、変数「fileName」に次のExcelファイル名が格納されます。
      フォルダ内のすべてのExcelファイルが処理されるまでこの処理が繰り返されます。
  9. Loop
    • この行は、Do While ループの終わりを示します。
      ループがここに到達すると、再び Do While の条件に戻り、fileName が空白でない限りループが継続します。
      フォルダ内のすべての「.xlsx」ファイルが処理されるまで、Dir 関数が繰り返し呼び出されます。
      すべてのファイルが処理されると、ループは終了します。
  10. End Sub
    • ここで、Subステートメントで始まったサブルーチンが終了します。

総括・ポイント

このコードは、指定されたフォルダ内のすべてのExcelファイル(.xlsx)を検索し、その名前を出力します。

使用例5: フォルダ内のすべてのファイルを開く

フォルダ内のすべてのExcelファイルを検索し、それらを一つずつ開くには、Workbooks.Openメソッドを使用します。

コード例 | フォルダ内のすべてのファイルを開く

Sub OpenMultipleExcelFiles()
    Dim filePath As String
    Dim fileName As String

    filePath = "C:\サンプル\"
    fileName = Dir(filePath & "*.*")

    Do While fileName <> ""
        Workbooks.Open filePath & fileName
        fileName = Dir()
    Loop
End Sub

コードの動作概要

STEP
フォルダパスを変数に格納

指定したフォルダ(例: “C:\サンプル\”)のパスを変数「filePath」に保存します。

STEP
Dir関数で最初のファイル名を取得

Dir関数を使って、フォルダ内の最初のファイル名を取得し、それを変数「fileName」に格納します。

STEP
ループ処理でファイルを順次開く

Do Whileループを使用して、フォルダ内のすべてのファイルを順次開きます。
ファイル名が空になるまで繰り返し実行され、すべてのファイルが開かれます。

STEP
次のファイル名を取得

ループ内で再度Dir関数を呼び出し、次のファイル名を取得して処理を続けます。
すべてのファイルが処理されるまで、このプロセスを繰り返します。

このコードで使用している機能

スクロールできます
機能説明
Dim (変数)変数を宣言するための構文です。
ここでは、filePath(フォルダパス)とfileName(ファイル名)を文字列型で宣言しています。
Workbooks.Openメソッド
(ファイルを開く)
指定されたファイルパスのExcelファイルを開きます。
このコードでは、フォルダ内のすべてのファイルを順次開く処理を行っています。
Do While文 (繰り返し)条件が真(True)の間、繰り返し処理を実行するループ構文です。
ここでは、fileNameが空でない限りファイルを次々と開きます。

1行ずつコードを解説

「クリック」してコードの詳細解説を見る

 Dir関数の構成解説

Dir関数の構成
  1. pathname ⇒ filePath & “*.*”
    • ファイルパス「C:\サンプル\*.*」のファイルを検索しています。
      ※「*」はワイルドカードといい、どんな文字でも構わないという意味です。
  2. attributes ⇒ 省略
    • 今回、属性は何も指定していません。
      全てのファイルを検索します。

■ コードの解説

  1. Sub OpenMultipleExcelFiles()
    • この行では、OpenMultipleExcelFiles というサブルーチンが定義されています。
      このサブルーチンの目的は、指定されたフォルダ内にあるすべてのExcelファイルを順番に開くことです。
  2. Dim filePath As String
    • この行では、「filePath」という文字列型(String)の変数を宣言しています。
  3. Dim fileName As String
    • この行では、「fileName」という文字列型(String)の変数が宣言されています。
  4. filePath = “C:\サンプル\”
    • この行では、変数「filePath」に 「C:\サンプル\」という具体的なフォルダのパスが代入されています。
      このフォルダが検索対象となり、フォルダ内のExcelファイルが次に説明する Dir 関数で検索されます。
  5. fileName = Dir(filePath & “*.*”)
    • 「Dir 関数」を使用して、指定されたフォルダ内の最初のファイル名を取得し、変数「fileName」に格納します。
      「filePath & “*.*”」は、変数「filePath」に格納されたフォルダパス(例:”C:\サンプル\”)にワイルドカード “*.*” を追加しています。
      “*.*” は、フォルダ内のすべてのファイルを検索対象にするワイルドカードで、拡張子に関係なくすべてのファイルを取得します。
      この行の実行によって、フォルダ内の最初のファイル名(例:”サンプル1.xlsx”)が、変数「fileName」に格納されます。
  6. Do While fileName <> “”
    • ここでは、Do While ループが開始されます。
      変数「fileName」にファイル名が格納されている間、つまりファイルが存在する限りこのループは繰り返し実行されます。
      fileName が空白(””)になると、すべてのファイルが処理されたことを意味し、ループは終了します。
  7. Workbooks.Open filePath & fileName
    • この行では、「Workbooks.Open() メソッド」を使用して、Excelファイルを開いています。
      「filePath & fileName」 ここでは、変数「filePath」に格納されたフォルダのパスと、「fileName」 に格納されたファイル名を結合して、完全なファイルパスを指定しています。

      例えば、filePath が「C:\サンプル\」で、変数「fileName」が 「サンプル1.xlsx」であれば、この行は 「C:\サンプル\サンプル1.xlsx」という完全なパスを作成し、そのファイルを開きます。
      ※「Workbooks.Open() メソッド」については、別記事で解説を行っています。合わせてご覧ください。
  8. fileName = Dir()
    • 「Dir関数」を再び呼び出して、次のファイル名を取得しています。
      2回目以降の Dir 関数の呼び出しでは、引数を省略することで、前回の検索結果に続く次のファイルを取得します。
      この行の実行により、次のファイル名が、変数「fileName」に格納され、ループ内で処理が続行されます。
      フォルダ内のすべてのファイルが処理されるまで、このプロセスが繰り返されます。
  9. Loop
    • ここで、Do While ループが終了します。
      ループの最後に到達すると、再び Do While の条件に戻り、fileName が空白でない限りループを継続します。
      すべてのファイルが処理されるまで、ループは繰り返されます。
      すべてのファイルが処理されると、Dir 関数は空白を返し、ループが終了します。
  10. End Sub
    • この行で、Sub ステートメントで始まったサブルーチンが終了します。

総括・ポイント

このコードは、指定されたフォルダ内のすべてのExcelファイルを順次開きます。

使用例6: フォルダ内のすべてのファイル名を取得しセルに記載する
(ハイパーリンクも設定)

取得したファイル名を、セルに転記することもできます。
さらに、ハイパーリンクも合わせて設定します。
これにより、クリックするとファイルを開くことができます。

コード例 | フォルダ内のすべてのファイル名を取得しセルに記載

Sub ListFilesWithHyperlinks()
    Dim Ws As Worksheet
    Dim filePath As String
    Dim fileName As String
    Dim i As Long

    filePath = "C:\サンプル\"
    
    Set Ws = ThisWorkbook.Sheets(1) '// 結果を表示するシート
    i = 1 '//行番号を初期化

    fileName = Dir(filePath & "*.*", vbHidden Or vbReadOnly)

    Do While fileName <> ""
        '// ハイパーリンクの設定
        Ws.Hyperlinks.Add _
                Anchor:=Ws.Cells(i, 1), _
                Address:=filePath & fileName, _
                TextToDisplay:=fileName
                
        i = i + 1
        fileName = Dir()
    Loop
End Sub

処理結果

使用例6: フォルダ内のすべてのファイル名を取得しセルに記載する
の結果です。

コードの動作概要

STEP
フォルダパスを変数に格納

指定したフォルダ(例: “C:\サンプル\”)のパスを変数「filePath」に保存します。

STEP
Dir関数で最初のファイル名を取得

Dir関数を使用して、フォルダ内の最初のファイル名(隠しファイルや読み取り専用ファイルも含む)を取得し、変数「fileName」に格納します。

STEP
ループ処理でファイル名を順次セルに記載し、ハイパーリンクを設定

Do Whileループを使い、すべてのファイル名を1つずつ取得し、それをExcelシートのセルに表示するとともに、そのファイルにリンクするハイパーリンクを設定します。

STEP
次のファイル名を取得し、繰り返す

ループ内で再びDir関数を呼び出し、次のファイル名を取得して処理を続けます。
フォルダ内のすべてのファイルが処理されるまで、このプロセスが繰り返されます。

このコードで使用している機能

スクロールできます
機能説明
Dim (変数)変数を宣言するための構文です。
ここでは、filePath(フォルダパス)、fileName(ファイル名)、
i(行番号)をそれぞれ適切な型で宣言しています。
Set – Dim (オブジェクト変数)Excelのシートオブジェクトを参照するための構文です。
ここでは、WsThisWorkbook.Sheets(1)に設定し、対象シートを操作しています。
Do While文 (繰り返し)条件が真(True)の間、繰り返し処理を実行するループ構文です。
ここでは、fileNameが空でない限り処理を繰り返してファイルを取得し続けます。
Hyperlinks(ハイパーリンク)セルにハイパーリンクを追加するためのメソッドです。
ここでは、セルにファイル名を表示し、そのファイルへのリンクを設定しています。

1行ずつコードを解説

「クリック」してコードの詳細解説を見る

 Dir関数の構成解説

Dir関数の構成
  1. pathname ⇒ filePath & “*.*”
    • ファイルパス「C:\サンプル\*.*」のファイルを検索しています。
      ※「*」はワイルドカードといい、どんな文字でも構わないという意味です。
  2. attributes ⇒ vbHidden Or vbReadOnly
    • vbHidden「属性のないファイルと隠しファイル」
      vbReadOnly「属性のないファイルと読み取り専用のファイル」

      この2つを含む、全てのファイルを検索します。
      また、複数指定したい場合は「Or」を使用することもできます。
      ⇒ もう一度、属性について確認したい方は、「attributes」を参照

■ コードの解説

  1. Sub ListFilesWithHyperlinks()
    • この行では、ListFilesWithHyperlinks というサブルーチンが定義されています。
      Sub ステートメントはVBAのサブルーチン(複数のコード行をまとめて処理する)を定義するために使用されます。
  2. Dim Ws As Worksheet
    • 「Ws」は Worksheet 型のオブジェクト変数として宣言されています。
      Worksheet はExcelのシートオブジェクトを表し、この変数に操作対象のシートを代入することで、指定されたシート上で処理を行うことができます。
  3. Dim filePath As String
    • 「filePath」は文字列型(String)の変数で、フォルダのパスを格納します。
  4. Dim fileName As String
    • 「fileName」は文字列型(String)の変数で、「Dir関数」で取得したファイル名を格納します。
  5. Dim i As Long
    • 「i」は長整数型(Long)の変数で、シート上の行番号を保持します。
      結果のファイル名とハイパーリンクを表示する行を決定するために使用されます。
      長整数型は大きな数値でも扱えるため、行番号が大きくなっても対応可能です。
  6. filePath = “C:\サンプル\”
    • 変数「filePath」にフォルダパス「C:\サンプル\」が代入されています。
      このパスは、「Dir関数」が検索するフォルダを示しています。
      ファイルを検索する対象のディレクトリです。
  7. Set Ws = ThisWorkbook.Sheets(1)
    • オブジェクト変数「Ws」に現在のワークブック(ThisWorkbook)の最初のシート(Sheets(1))がセットされています。
      「Setステートメント」はオブジェクト型変数に値を代入するために使用されます。
      このシートにファイル名とハイパーリンクが表示されます。
  8. i = 1
    • 「i」に「1」を代入し、シート上の表示を開始する行番号を初期化しています。
      ファイル名とハイパーリンクを1行目から表示し始めます。
  9. fileName = Dir(filePath & “*.*”, vbHidden Or vbReadOnly)
    • 「Dir関数」を使用して、変数「filePath」で指定されたフォルダ内の最初のファイル名を取得し、変数「fileName」に格納します。
      “*.*” はワイルドカードで、拡張子に関わらずすべてのファイルを検索対象とします。
      vbHidden Or vbReadOnly」 により、隠しファイルや読み取り専用ファイルも検索対象に含まれます。
  10. Do While fileName <> “”
    • Do While ループの開始です。
      変数「fileName」が空でない限り(つまり、フォルダにファイルが存在する限り)、ループが実行されます。
      フォルダ内のすべてのファイルが処理されるまでループが続きます。
  11. Ws.Hyperlinks.Add
    Anchor:=Ws.Cells(i, 1), _
    Address:=filePath & fileName, _
    TextToDisplay:=fileName
    • ハイパーリンクの設定です。
      • Ws.Hyperlinks.Add:
        • オブジェクト変数「Ws」にセットされたシートに対してハイパーリンクを追加します。
      • Anchor:=Ws.Cells(i, 1):
        • Anchor は、ハイパーリンクを挿入するセルを指定します。
          ここでは i 行目の1列目のセル(Ws.Cells(i, 1))が指定されています。
      • Address:=filePath & fileName:
        • Address にはリンク先のアドレスを指定します。
          変数「filePath」と変数「fileName」を結合しフルパスとすることで、クリックするとそのファイルが開くリンクが設定されます。
      • TextToDisplay:=fileName:
        • TextToDisplay にはセルに表示されるリンクテキストを指定します。
          ここではファイル名をリンクテキストとして表示します。
  12. i = i + 1
    • 「i」の値を「1」増加させます。
      これにより、次のファイル名とハイパーリンクがシートの次の行に表示されます。
      行を下にずらして表示するための処理です。
  13. fileName = Dir()
    • 「Dir関数」を再度呼び出し、次のファイル名を取得します。
      2回目以降の Dir 関数の呼び出しでは、引数を省略することで前回の検索結果に続くファイルを取得できます。
      このプロセスを繰り返し、フォルダ内のすべてのファイルを処理します。
  14. Loop
    • ここで Do While ループが終了します。
      ループはフォルダ内のすべてのファイルが処理されるまで繰り返されます。
      すべてのファイルが処理されると、変数「fileName」が空になりループが終了
      します。
  15. End Sub
    • サブルーチンの終了を意味します。

総括・ポイント

このコードは、指定されたフォルダ内のすべてのExcelファイルを取得し、そのファイル名をセルにハイパーリンクとして設定します。
ユーザーはハイパーリンクをクリックすることで、直接ファイルを開くことができます。

スポンサーリンク

他のファイル取得方法や関数との比較

ファイル名やパスの取得に特化した他の方法

  • FileSystemObject
    • VBAのFileSystemObjectを使うと、Dir関数以上に高度なファイル操作が可能です。
      例えば、ファイルの作成日やサイズを取得する場合に便利です。
  • Shellオブジェクト
    • Shellオブジェクトを使うことで、システムの特定の機能を操作したり、ファイルを開いたりすることができます。

この記事のまとめ

この記事では、VBAのDir関数を使って、フォルダ内のファイルを効率的に操作する方法について学びました。

Dir関数を活用することで、ファイル名の取得や自動化が可能になり、業務効率化に役立てることができます。

ポイントのおさらい

  • Dir関数とは?
    • Dir関数は、特定のフォルダ内にあるファイルやフォルダの名前を取得するために使います。
      ワイルドカードを使用することで、特定のパターンに一致するファイルを効率的に検索できます。

      ⇒ 「Dir関数とは?」もう一度見る。
  • Dir関数の構成
    • Dir関数の基本的な構成には、ファイルパスを指定する「pathname」と、検索するファイルの属性を指定する「attributes」があります。
      これにより、必要なファイルを正確に検索することができます。

      「Dir関数の構成」もう一度見る。
  • Dir関数のワイルドカードについて
  • Dir関数を使用の注意ポイントについて
    • Dir関数は、一度に複数のフォルダを同時に検索することができません。
      異なるフォルダを検索する場合は、Dir関数の処理が完了した後に、再度呼び出す必要があります。
      Dir関数で取得したファイルリストは、取得時点のものであり、その後にファイルが削除されたり追加された場合、反映されません。
      リストを操作する際には、最新の状態を把握していることを確認しましょう。

      ⇒ 「Dir関数を使用するにあたっての注意ポイント」もう一度見る。
  • Dir関数の具体的な使用例
    • Dir関数を使った実際のコード例を紹介しました。
      フォルダ内の最初のファイル名の取得や、特定の拡張子に絞ったファイル検索など、実際に業務で役立つシナリオに応じて使い分けましょう

      ⇒ 「Dir関数の使用例」もう一度見る。

さらに学ぶために

Dir関数の使い方に慣れてきたら、VBAのFileSystemObjectやShellオブジェクトを活用して、さらに高度なファイル操作に挑戦してみましょう。


それぞれが持つ特定の用途と利点を理解することで、VBAの操作がさらに効率的になります。

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「Python...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次