VBAサンプル集
エクセルでファイル一覧を作成.№3(Dir関数2)

ExcelマクロVBAでファイル一覧を作成、サブフォルダ以下を全て取得
公開日:2013年5月以前 最終更新日:2014-11-11

エクセルでファイル一覧を作成.№3(Dir関数2)


エクセルでファイル一覧を作成します、


サブフォルダ以下も全て取得し、一覧表示します、


先にまず、完成イメージです。


Excel VBA 解説


前回のプログラム


Sub ファイル一覧取得()
  Dim strBuf As String
  Dim i As Long
  i = 5
  strBuf = Dir(Cells(4, 2))
  Do While strBuf <> ""
    Cells(i, 2) = strBuf
    i = i + 1
    strBuf = Dir()
  Loop
End Sub

ファィルの一覧は取得出来ましたが、サブフォルダが取得できていません。

実は、Dir関数には、第2引数があります。

定数 内容
vbNormal 0 標準ファイル
vbReadOnly 1 読み取り専用ファイル
vbHidden 2 隠しファイル
vbSystem 4 システムファイル(Macintoshでは使用できません)
vbVolume 8 ボリュームラベル(Macintoshでは使用できません)
vbDirectory 16 フォルダ
vbAlias 64 エイリアスファイル(Macintoshでのみ使用できます)

省略時は、vbNormalです。


この為フォルダは取得できませんでした。


そこで、

strBuf = Dir(Cells(4, 2))

strBuf = Dir(Cells(4, 2), vbDirectory)

とすれば、フォルダが取得できます。


「あれっ、すると、今度はファィルが取得できないのでは?」


良い質問です。←池上彰風!



定数の値を見て下さい。


数列のクイズみたいになっています。


2の倍々ですが・・・


この数字は、任意の複数を合計しても、他と重複しないようになっています。

(vbAliasは32で良いはずですが、32は将来の予備に空けているのでしょうか)


つまり、複数の指定を「+」で指定できるようにしてあります。


そして、0は足しても足さなくても同じですので、


「vbNormal」は、常に指定されているのと同じ事になります。


ですから、

strBuf = Dir(Cells(4, 2), vbDirectory)

で、標準ファイルとフォルダが取得できます。


今回は、読み取り専用も追加して、

strBuf = Dir(Cells(4, 2), vbNormal + vbReadOnly + vbDirectory)

としましょう。


vbNormalは指定しなくても良いと言いましたが、

他の指定をする場合は、明示するようにしましょう、誤解を招かないようです。


もちろん、合計数値で指定しても動作しますが、後で分からなくなりますので止めましょう。


これで、標準ファイル、読み取り専用ファイル、フォルダ、の一覧が取得できるようになりました。



「あのー、一覧の最初に、...というのがあるのですが」


良い質問です。←池上彰風!


「.」は、自分自身のフォルダ

「..」は、1つ上のフォルダ


を表す、相対フォルダです。


階層構造のパスを指定したりする場合に使用しますが、


ここでは、Windowsが使っている特殊なフォルダとだけ覚えておきましょう。


とにかく、邪魔なので除外しましょう。




Sub ファイル一覧取得()
  Dim strBuf As String
  Dim i As Long
  i = 5
  strBuf = Dir(Cells(4, 2), vbNormal + vbReadOnly + vbDirectory)
  Do While strBuf <> ""
    If strBuf <> "." And strBuf <> ".." Then
      Cells(i, 2) = strBuf
      i = i + 1
    End If
    strBuf = Dir()
  Loop
End Sub

これで良いですね。



定数について


Dir関数の第2引数に指定する定数は、名前付き定数と呼びます。


これは、関数だけでなく、プロパティ値でも使われているので、それこそ沢山あります。


そして、複数指定が可能な場合は、上記のように重複しない工夫がなされています。


当然、関数毎、プロパティ毎に、違いますので、


入力候補表示で確認したり、ヘルプを参照して使用する事になります。


全てを記憶するなど出来ないし、意味がありません。


しかし、どんな指定が可能か、どのようになるのかは、知っておく必要があります。


必ず一度は、ヘルプを参照して下さい。



今回は、ここまで、


次回は、フォルダなのか、ファイルなのかを判定します。





同じテーマ「ファイル一覧を作成」の記事

エクセルでファイル一覧を作成.№1(概要)
エクセルでファイル一覧を作成.№2(Dir関数1)
エクセルでファイル一覧を作成.№3(Dir関数2)
エクセルでファイル一覧を作成.№4(FileLen,FileDateTime)
エクセルでファイル一覧を作成.№5(FileDialog)
エクセルでファイル一覧を作成.№6(FileSystemObject1)
エクセルでファイル一覧を作成.№7(FileSystemObject2)
エクセルでファイル一覧を作成.№8(インデント)
エクセルでファイル一覧を作成.№9(罫線)
エクセルでファイル一覧を作成.№10(完成)


新着記事NEW ・・・新着記事一覧を見る

ハイフン区切り文字列の『最初』と『最後』を抽出・結合|エクセル練習問題(2026-02-23)
AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ