Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3462 / 13645 ツリー ←次へ | 前へ→

【62077】フォルダ内のファイル数を知りたい たかお 09/6/20(土) 19:21 質問[未読]
【62078】Re:フォルダ内のファイル数を知りたい つるりん 09/6/20(土) 20:08 回答[未読]
【62079】Re:フォルダ内のファイル数を知りたい つるりん 09/6/20(土) 20:31 発言[未読]
【62080】Re:フォルダ内のファイル数を知りたい kanabun 09/6/20(土) 21:14 発言[未読]
【62081】Re:フォルダ内のファイル数を知りたい neptune 09/6/20(土) 21:36 発言[未読]
【62083】Re:フォルダ内のファイル数を知りたい たかお 09/6/20(土) 22:10 お礼[未読]
【62084】Re:フォルダ内のファイル数を知りたい kanabun 09/6/21(日) 0:00 発言[未読]
【62087】Re:フォルダ内のファイル数を知りたい たかお 09/6/21(日) 9:08 お礼[未読]
【62082】Re:フォルダ内のファイル数を知りたい たかお 09/6/20(土) 21:40 お礼[未読]

【62077】フォルダ内のファイル数を知りたい
質問  たかお  - 09/6/20(土) 19:21 -

引用なし
パスワード
   お世話になります。
あるフォルダの中に1〜3000個のがあります。
そのファイルの数を簡単に調べる方法がありませんか?

フォルダ内のファイルを順に処理すると、数が多い時は非常に時間が掛かります。
そこで進捗をProgressBarで表わしたいと思いますが、進捗100%に対応する
[ファイル数]を先に取得する必要があり、簡単に(早く)[ファイル数]を
知りたいのです。

FileSearchや、DirのLoopでは時間が掛かり過ぎ困っています。
宜しくお願い致します。

【62078】Re:フォルダ内のファイル数を知りたい
回答  つるりん  - 09/6/20(土) 20:08 -

引用なし
パスワード
   Sub try()
Dim myFso As Scripting.FileSystemObject
Dim myFiles As Scripting.Files
Dim myFile As Scripting.File
Dim i As Long
Set myFso = New Scripting.FileSystemObject
Set myFiles = myFso.GetFolder("******").Files
i = 0
For Each myFile In myFiles
  i = i + 1
Next
Debug.Print i
End Sub
上記でどうでしょう?
*****←フォルダパス

【62079】Re:フォルダ内のファイル数を知りたい
発言  つるりん  - 09/6/20(土) 20:31 -

引用なし
パスワード
   追伸
MS Scripting Runtime の参照設定が必要です。
ちなみに、5000ファイル程度のカウントに1秒かかりません。
スペックにもよるでしょうが。

【62080】Re:フォルダ内のファイル数を知りたい
発言  kanabun  - 09/6/20(土) 21:14 -

引用なし
パスワード
   ▼たかお さん:

>あるフォルダの中に1〜3000個のがあります。
>そのファイルの数を簡単に調べる方法がありませんか?

>FileSearchや、DirのLoopでは時間が掛かり過ぎ困っています。


ファイルの数だけなら、Loopしなくとも、 以下で可能でしょう

 Const myPath = "D:\(Data)" '--- あるフォルダ
 MsgBox CreateObject("Scripting.FileSystemObject"). _
     GetFolder(myPath).Files.Count


サブフォルダも含める必要はないのですか?
ファイルの種類(たとえば *.xls* だけとか)を特定する必要はないですか?

【62081】Re:フォルダ内のファイル数を知りたい
発言  neptune  - 09/6/20(土) 21:36 -

引用なし
パスワード
   ▼kanabun さん:
>▼たかお さん:
>
>>あるフォルダの中に1〜3000個のがあります。
>>そのファイルの数を簡単に調べる方法がありませんか?
>
>>FileSearchや、DirのLoopでは時間が掛かり過ぎ困っています。
現在どれくらい掛かってますか?
3000前後程度のファイル数として、カウントだけならどの方法を使っても
PCの性能にもよりますがちょっと前のマシンでもホンの0.1sec以下ですむと
思いますが?

私の非力なマシンでも約1000ファイルがfso,Dir共に10〜20msで処理できました。


いずれにしても、どのような方法を取るにせよ体感できるほどの
差は出ないはずです。

【62082】Re:フォルダ内のファイル数を知りたい
お礼  たかお  - 09/6/20(土) 21:40 -

引用なし
パスワード
   つるりんさん、kanabunさん ありがとうございます。
へー こんな方法があるのか・・・
VBAって奥が深いですね。(私が知らないだけか)
早速試して見ます。

【62083】Re:フォルダ内のファイル数を知りたい
お礼  たかお  - 09/6/20(土) 22:10 -

引用なし
パスワード
   ▼neptune さん:

質問では状況を少し省略していたためお手数をお掛けしました。
確かに自PCのフォルダでは、neptune さんの指摘通りですが、
検索したいフォルダは、LANで接続されたPCに在る共用フォルダです。

ローカルと比べてリモートファイルは非常に遅くなります。
(特にFileSearchは極端に遅い)
月曜日に会社のPCで再確認して見ます。

【62084】Re:フォルダ内のファイル数を知りたい
発言  kanabun  - 09/6/21(日) 0:00 -

引用なし
パスワード
   ▼たかお さん:

>検索したいフォルダは、LANで接続されたPCに在る共用フォルダです。
>
>ローカルと比べてリモートファイルは非常に遅くなります。
>(特にFileSearchは極端に遅い)

FileSearch は(Excel2007では機能しないし)論外として、
FileSystemObjectも Dir Loop に比べたら 遅いですよ。
ただ、ファイル数を求めるだけなら 前述のFso 1行コードでいいわけですが、
総数を求めて、さらにそれらに対して 順次処理するとなると、
ま、
Win32 API(FindFirstFile FindNextFileのLoop)で検索する
のが速いでしょうね。

ところで、
> サブフォルダも含める必要はないのですか?
> ファイルの種類(たとえば *.xls* だけとか)を特定する必要はないですか?

についてはどうなんでしょ?
  サブフォルダは検索しない。
  指定フォルダ内のファイルは共通拡張子である
ということなんでしょうか。

【62087】Re:フォルダ内のファイル数を知りたい
お礼  たかお  - 09/6/21(日) 9:08 -

引用なし
パスワード
   ▼kanabun さん:
丁寧なご指導ありがとうございます。
>
>ところで、
>> サブフォルダも含める必要はないのですか?
>> ファイルの種類(たとえば *.xls* だけとか)を特定する必要はないですか?
>
>についてはどうなんでしょ?
>  サブフォルダは検索しない。
>  指定フォルダ内のファイルは共通拡張子である
>ということなんでしょうか。
  ↓
現在のところ仕様はまだ固まっていません。(取あえずの範囲の仕様です)
今回は、処理時間が掛かる場合があり、進捗を表示(ProgressBar)するのに
ファイル数を知りたいと思って質問しました。

作成中のプログラムは、ファイルの名前を読込み、種類の分類するまでで、
後から、ファイルの名前毎の処理を追加したいと思っていますが、
私の実力との兼ね合いでどこまで実現できるのか不明です。

エクセルファイルを対象としていますが、CSVファイルも混じっていたり、
サブフォルダは使用していませんが、使い勝手を考えればいつかやりたいと
思っています。
先々のことを考えて作成すべきと思いますが、現状の業務作業優先の中で
少しづつ実現して行こうと思っています。
また行き詰まったら投稿しますので、その時は宜しくお願いします。

3462 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free