エクセルでファイル一覧を作成 | エクセルでファイル一覧を作成.3(Dir関数2) | ExcelマクロVBAでファイル一覧を作成、サブフォルダ以下を全て取得



最終更新日:2014-11-11

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


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


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


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



前回のプログラム


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引数に指定する定数は、名前付き定数と呼びます。


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


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


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


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


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


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


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



今回は、ここまで、


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






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

エクセルでファイル一覧を作成.4(FileLen,FileDateTime)
エクセルでファイル一覧を作成.5(FileDialog)
エクセルでファイル一覧を作成.6(FileSystemObject1)
エクセルでファイル一覧を作成.7(FileSystemObject2)
エクセルでファイル一覧を作成.8(インデント)
エクセルでファイル一覧を作成.9(罫線)
エクセルでファイル一覧を作成.10(完成)

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

データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.ひらがな⇔カタカナの変換|エクセル基本操作



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

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


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

    ↑ PAGE TOP