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

DIr関数について VBA

指定したフォルダ内のファイルをセルに表示させたい!!
そんなお悩みありませんか?

お悩みpoint
悩む人
  • フォルダ内の特定のファイルを探したいけれど、どのようにファイル名を取得すればいいのかわからない。
  • ファイルのパスを自動的に取得したい。
  • ワイルドカードという言葉を聞いたことがあるけど、どう使うの?

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

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

基本的な使い方から、実際の業務で役立つ応用例まで、分かりやすく解説していきます。

この記事を読むだけで、あなたもすぐにVBAのDir関数を使いこなせるようになります!


【 この記事の概要 】

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

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

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

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

Dir関数とは?

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

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

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

以下に、Dir関数の基本的な構文とその使用例を紹介します。

Dir関数の構成

Dir関数の構成

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

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

      ⇒ 詳細は事項で解説します。

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

attributesの属性詳細

Dir関数で指定できるファイルの属性は以下の通りです。
これらの属性を組み合わせて、検索対象をさらに絞り込むことができます。

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

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

Dir関数を使用するうえで、注意ポイントがあります。

まず使用例を記述します。
※このコードは、指定されたフォルダ内のすべてのExcelファイル (.xlsx) の名前を取得します。

Dim filePath As String
Dim fileName As String

filePath = "C:\サンプル\"
fileName = Dir(filePath & ".xlsx", vbNormal)
  1. フォルダのパスを「フォルダパス」と記述していますが、パソコンによってはバックスラッシュ (バックスラッシュ)」を入力しても「\」と表示されてしまう場合があります。
    その場合「\」のままで正常に動作します。
  2. フォルダのパスを指定する際、最後に「\」と記述するのを忘れないようにしましょう。
    フォルダパス
    ※ワイルドカードの指定側に記載するのであれば、問題ありません。
  3. Dir関数は、1回目の呼び出しで指定したファイル名を取得し、2回目以降は引数なしで呼び出します。
    このため、複数のディレクトリ検索を同時に行うことはできません。
    ※詳細は、事項使用例で解説します。
  4. Dir関数で取得したファイルは、取得時点で存在していたものであり、その後にファイルが削除されたり追加されたりした場合は反映されません

Dir関数の使用例

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

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

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

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

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

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

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

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

    Debug.Print fileName
End Sub
動作概要
  • STEP1
    フォルダパスを変数に格納

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

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

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

  • STEP3
    ファイル名を出力

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

処理結果

使用例1の結果です。

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

詳細解説

コード詳細

Dir関数の構成解説

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

コードの解説

  • Sub GetFirstFileName()
    • ここでは、Subステートメントを使用して新しいプロシージャ(サブルーチン)を定義しています。
      このプロシージャの名前は GetFirstFileName です。
  • Dim filePath As String
    • この行では、新しい変数「filePath」を宣言しています。
      「filePath」 は「文字列型(String)」の変数として宣言されています。
      この変数は、後の行でファイルパス(フォルダの場所)を格納するために使われます。
  • Dim fileName As String
    • この行では、もう一つの変数「fileName」を文字列型(String)として宣言しています。
      この変数は、Dir関数で取得したファイル名を格納するために使用されます。
  • filePath = “C:\サンプル\”
    • ここでは、変数「filePath」にフォルダのパスが代入されています。
      この例では、”C:\サンプル\” というフォルダが指定されています。
      このパスは、Dir関数で検索対象とするフォルダを示しています。
      Windowsのファイルシステムでは、ディレクトリの区切りには「\(バックスラッシュ)」を使用します。
  • fileName = Dir(filePath & “*.*”)
    • ここでは、Dir関数を使用して指定したフォルダ内の最初のファイル名を取得しています。
      filePath & “*.*”」という表記により、変数「filePath」の値( “C:\サンプル\” )にワイルドカード「”*.*”」が追加されます。
      ワイルドカード 「”*.*”」は、フォルダ内のすべてのファイルを意味し、拡張子にかかわらずフォルダ内の全ファイルを検索対象にします。
      例えば、”C:\サンプル\” フォルダ内に、”サンプル1.xlsx” というファイルが最初にあれば、この最初にあるファイル名が取得され、変数「fileName」に代入されます。

このコードを実行すると、指定されたフォルダ内の最初のファイル名を取得し、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
動作概要
  • STEP1
    フォルダパスを変数に格納

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

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

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

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

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

  • STEP4
    次のファイル名を取得

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

処理結果

使用例2の結果です。

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

詳細解説

コード詳細

Dir関数の構成解説

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

コードの解説

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

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

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

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

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

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

  • STEP4
    次のファイル名を取得

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

処理結果

使用例3の結果です。

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

詳細解説

コード詳細

Dir関数の構成解説

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

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

コードの解説

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

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

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

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

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

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

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

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

  • STEP4
    次のExcelファイル名を取得

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

処理結果

使用例4の結果です。

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

詳細解説

コード詳細

Dir関数の構成解説

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

コードの解説

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

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

このコードは、指定されたフォルダ内のすべての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
動作概要
  • STEP1
    フォルダパスを変数に格納

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

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

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

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

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

  • STEP4
    次のファイル名を取得

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

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

詳細解説

コード詳細

Dir関数の構成解説

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

コードの解説

  • Sub OpenMultipleExcelFiles()
    • この行では、OpenMultipleExcelFiles というサブルーチンが定義されています。
      このサブルーチンの目的は、指定されたフォルダ内にあるすべてのExcelファイルを順番に開くことです。
  • Dim filePath As String
    • この行では、「filePath」という文字列型(String)の変数を宣言しています。
  • Dim fileName As String
    • この行では、「fileName」という文字列型(String)の変数が宣言されています。
  • filePath = “C:\サンプル\”
    • この行では、変数「filePath」に 「C:\サンプル\」という具体的なフォルダのパスが代入されています。
      このフォルダが検索対象となり、フォルダ内のExcelファイルが次に説明する Dir 関数で検索されます。
  • fileName = Dir(filePath & “*.*”)
    • 「Dir 関数」を使用して、指定されたフォルダ内の最初のファイル名を取得し、変数「fileName」に格納します。
      「filePath & “*.*”」は、変数「filePath」に格納されたフォルダパス(例:”C:\サンプル\”)にワイルドカード “*.*” を追加しています。
      “*.*” は、フォルダ内のすべてのファイルを検索対象にするワイルドカードで、拡張子に関係なくすべてのファイルを取得します。
      この行の実行によって、フォルダ内の最初のファイル名(例:”サンプル1.xlsx”)が、変数「fileName」に格納されます。
  • Do While fileName <> “”
    • ここでは、Do While ループが開始されます。
      変数「fileName」にファイル名が格納されている間、つまりファイルが存在する限りこのループは繰り返し実行されます。
      fileName が空白(””)になると、すべてのファイルが処理されたことを意味し、ループは終了します。
  • Workbooks.Open filePath & fileName
    • この行では、「Workbooks.Open() メソッド」を使用して、Excelファイルを開いています
      「filePath & fileName」 ここでは、変数「filePath」に格納されたフォルダのパスと、fileName に格納されたファイル名を結合して、完全なファイルパスを指定しています。
      例えば、filePath が「C:\サンプル\」で、変数「fileName」が 「サンプル1.xlsx」であれば、この行は 「C:\サンプル\サンプル1.xlsx」という完全なパスを作成し、そのファイルを開きます。
      ※「Workbooks.Open() メソッド」については、別記事で解説を行っています。
       解説の最後にリンクを記載しておきますので、気になる方は合わせてご覧ください。
  • fileName = Dir()
    • 「Dir関数」を再び呼び出して、次のファイル名を取得しています。
      2回目以降の Dir 関数の呼び出しでは、引数を省略することで、前回の検索結果に続く次のファイルを取得します。
      この行の実行により、次のファイル名が、変数「fileName」に格納され、ループ内で処理が続行されます。
      フォルダ内のすべてのファイルが処理されるまで、このプロセスが繰り返されます。
  • Loop
    • ここで、Do While ループが終了します。
      ループの最後に到達すると、再び Do While の条件に戻り、fileName が空白でない限りループを継続します。
      すべてのファイルが処理されるまで、ループは繰り返されます。
      すべてのファイルが処理されると、Dir 関数は空白を返し、ループが終了します。
  • End Sub
    • この行で、Sub ステートメントで始まったサブルーチンが終了します。

Workbooks.Openメソッドについては、別記事で解説を行っています。
合わせてご覧ください。

このコードは、指定されたフォルダ内のすべての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
動作概要
  • STEP1
    フォルダパスを変数に格納

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

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

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

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

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

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

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

処理結果

Dir関数の結果です。

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

解説

コード詳細

Dir関数の構成解説

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

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

コードの解説

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


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

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