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 ・・・新着記事一覧を見る

AI時代におけるRPAとVBAの位置づけ - 補完技術としての役割と未来 -|生成AI活用研究(2025-05-12)
スマートExcel|AI×Excel:AIと進化するExcelの新常識|生成AI活用研究(2025-05-11)
VBA開発の現場で生成AIはどう使う? そのメリットと潜むリスク|生成AI活用研究(2025-05-11)
CursorでVBAを直接?編集・実行できる環境構築について|生成AI活用研究(2025-05-10)
Geminiと100本ノック 17本目:重複削除(ユニーク化)|生成AI活用研究(5月10日)
Geminiと100本ノック 16本目:無駄な改行を削除|生成AI活用研究(5月6日)
AIがあればVBAはできる:セルに絵文字を入れる|生成AI活用研究(2025-05-07)
Geminiと100本ノック 15本目:シートの並べ替え|生成AI活用研究(5月6日)
Geminiと100本ノック 14本目:社外秘シート削除|生成AI活用研究(5月4日)
Geminiと100本ノック 13本目:文字列の部分フォント|生成AI活用研究(5月4日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



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