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

テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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