エクセルでファイル一覧を作成.№4(FileLen,FileDateTime)
エクセルでファイル一覧を作成します、
サブフォルダ以下も全て取得し、一覧表示します、
前回のプログラムです。
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
とにかく一覧は取得出来ましたが、フォルダとファイルがごちゃ混ぜです。
フォルダだけをまず取得し、それからファイルを取得して、一覧にします。
Sub ファイル一覧取得()
Dim strBuf As String
Dim i As Long
i =
5
strBuf = Dir(Cells(4, 2), vbDirectory)
Do While strBuf <>
""
If GetAttr(Cells(4, 2) & strBuf) And vbDirectory Then
If
strBuf <> "." And strBuf <> ".." Then
Cells(i, 2) =
strBuf
i = i + 1
End If
End If
strBuf =
Dir()
Loop
strBuf = Dir(Cells(4, 2), vbNormal + vbReadOnly)
Do
While strBuf <> ""
Cells(i, 2) = strBuf
i = i +
1
strBuf = Dir()
Loop
End Sub
これで、フォルダが先にきて、その後にファイルがくるようになりました。
strBuf = Dir(Cells(4, 2), vbDirectory)
そこで、
If GetAttr(Cells(4, 2) & strBuf) And vbDirectory Then
GetAttr(Cells(4, 2) & strBuf)
は、属性を取得する関数です。
フルパスを指定する必要があるので、指定フォルダであるCells(4, 2)を付けています。
戻り値は、Dirの第2引数と同じになります。
しかし、このIf文は分かりづらいですよね。
普通なら、
GetAttr(Cells(4, 2) & strBuf) = vbDirectory
と書きたいところです。
ほとんどの場合は、これでも大丈夫なのですが、いろいろな属性を「+」で追加した場合には、
フォルダが他の属性も持っている場合、例えば、「隠しファイル」でもあった場合は、
これではダメなのです。
この場合は、
GetAttr(Cells(4, 2) & strBuf) = vbDirectory + vbHidden
とする必要があります。
GetAttrの戻り値が、vbDirectory + vbHiddenになるからです。
全パターンを「=」で判断するのは大変です。
ANDなら、上記で判断できるのです。
この説明は大変なので、ごく簡単に。
ANDはビット単位の比較をして、1で一致するビットが存在する場合にTrueを返します。
vbDirectoryは、16(10000)、vbDirectory + vbHiddenは、18(10010)です。
この2つを重ねて、同じ位置に1があるかという判定です。
難しい話はともかく、この場合は、ANDを使って判定することだけ覚えて下さい。
このように判断しておけば、他に転用可能ですので。
strBuf = Dir(Cells(4, 2), vbNormal + vbReadOnly)
vbDirectoryを指定していないので、ファイルのみ取得されます。
今回は、ついでに、ファイルサイズと更新日時も取得してみましょう。
Sub ファイル一覧取得()
Dim strBuf As String
Dim i As Long
i =
5
strBuf = Dir(Cells(4, 2), vbDirectory)
Do While strBuf <>
""
If GetAttr(Cells(4, 2) & strBuf) And vbDirectory Then
If
strBuf <> "." And strBuf <> ".." Then
Cells(i, 2) =
strBuf
i = i + 1
End If
End If
strBuf =
Dir()
Loop
strBuf = Dir(Cells(4, 2), vbNormal + vbReadOnly)
Do
While strBuf <> ""
Cells(i, 2) = strBuf
Cells(i, 3)
= WorksheetFunction.RoundUp(FileLen(Cells(4, 2) & strBuf) / 1024,
0)
Cells(i, 3).NumberFormatLocal = "0
""KB"""
Cells(i, 4) = FileDateTime(Cells(4, 2) &
strBuf)
i = i + 1
strBuf = Dir()
Loop
End
Sub
WorksheetFunction.RoundUp(FileLen(Cells(4, 2) & strBuf) / 1024,
0)
FileLen(ファイル)
これは、ファイルサイズを返す関数です。
WorksheetFunction.RoundUp
これは、ワークシート関数をVBAで使っています。
ワークシートでの関数と使い方は同じです。
全ての関数が使えるわけではありませんが、多くの関数が使えるようになっています。
VBAでは、WorksheetFunctionは、積極的に使用することで、
簡単かつ、スピードアップします。
Cells(i, 3).NumberFormatLocal
書式の設定です。
"0 ""KB"""
は、「123 KB」のように表示する書式を設定しています。
指定の仕方は、セルの書式設定と同じですが、
「"」で全体を囲むので、中に入る、「"」は、「""」のように2つ並べます。
FileDateTime(ファイル)
これで、フォルダが先に表示され、続いてのファイルの一覧に、サイズ、更新日時が表示されます。
切り上げに使った、WorksheetFunction.RoundUp便利ですよね。
これが使用出来ない場合は、結構面倒なんです。
VBとかでは、自分でFunctionを作ったりします。
しかも、FixやらIntやらを使用して、ごちゃごちゃと。
ごく簡単には、0.4999999等を加算して、Roundでも良さそうなのですが、
VBAのRoundは、銀行型丸め(最近接偶数への丸め)なのです。
詳しくは、「関数で銀行型丸め(最近接偶数への丸め)を行う方法 」を参照して下さい。
結局、VBをやる人は、みんな自作のFunctionを使っているはずです。
それだけ、エクセルの関数は便利なのです。
同じテーマ「ファイル一覧を作成」の記事
エクセルでファイル一覧を作成.№1(概要)
エクセルでファイル一覧を作成.№2(Dir関数1)
エクセルでファイル一覧を作成.№3(Dir関数2)
エクセルでファイル一覧を作成.№4(FileLen,FileDateTime)
エクセルでファイル一覧を作成.№5(FileDialog)
エクセルでファイル一覧を作成.№6(FileSystemObject1)
エクセルでファイル一覧を作成.№7(FileSystemObject2)
エクセルでファイル一覧を作成.№8(インデント)
エクセルでファイル一覧を作成.№9(罫線)
エクセルでファイル一覧を作成.№10(完成)
新着記事NEW ・・・新着記事一覧を見る
最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- ファイル一覧を作成
- エクセルでファイル一覧を作成.№4(FileLen,FileDateTime)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
