• 締切済み

ProgressBarを用いる場合、全体の処理数の求め方(Do Loop文に関して)。

ProgressBarを用いる場合、全体の処理数を求めますが、Do Loopを用いる場合、For文と異なり必ずしもすぐに全処理数が分かるわけではありません。そのような場合、どのように全処理数を求めればよいですか? 私は、あるフォルダにあるファイルすべてを処理するプログラムを作りました。Do Loopで全てのファイルを参照し終わるまでをUntilの条件としています。したがって、いくつのファイルがあるかは分かりません。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

#2です。 >ファイル数の合計で結構です。ちょっと甘えていますが、先ほどのご回答のどこを改造すればよいのかがわかりません Private Sub test02() Dim fn As String Dim hn As String p01: fn = InputBox("フォルダ名=", "フォルダ指定", "c:\My Documents\") i = 1 sdirname = Dir(fn) Do While sdirname <> "" i = i + 1 '------ sdirname = Dir Loop MsgBox i & " 個のファイルあり" End Sub でやって見てください。 ファイル数やレコード数が取得できる、VBのプロパテイかメソッドがない場合は自分でそれらの数を算出し、変数にセットしないとなりません。プログレスバーを使うルーチンに入る前に。 これも1ファイルや1レコード当たりの処理時間が等しいと(違いは無視できると)言う前提で、全体300のうち60番目の処理をしている時は20%進行済みと表示すると言うことだと思います。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>ProgressBarを用いる場合、全体の処理数を求めますが、>Do Loopを用いる場合、For文と異なり必ずしもすぐに >全処理数が分かるわけではありません。そのような場合、 >どのように全処理数を求めればよいですか? 通常は、件数がわからないものにプログレスバーは使いません。というか、使えません。 なので、事前に処理件数が大雑把でもわかる必要があります。 もちろん、さまざまな処理に対して全処理数を求める汎用的な方法はありません。 >私は、あるフォルダにあるファイルすべてを処理する >プログラムを作りました。Do Loopで全てのファイルを >参照し終わるまでをUntilの条件としています。 >したがって、いくつのファイルがあるかは分かりません。 で、件数を取得する方法ですが、やっぱりDirで取ってくるしかないのでは? 件数を取得するだけの処理を作るのもなんだかと思いますが、プログレスバーを使いたいのでしたらしょうがないと思ってください。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

#1です。 あるフォルダの中のファイル数は#1を少し改造すると出ますのでそれの参考に上げたまでです。 >あくまでProgressBar表示のための全処理数を知りたいのですが ProgressBarは汎用的なものです。例えば処理時間の経過を表す場合は、処理完了予定時間の合計は判らないことが多いと思います。だから何をもって、処理時間に関係付けるかではないのでしょうか。この質問では何を知りたいのでしょうか。推定するに、例えばファイル数でなければ、フォルダ内の通しのレコード数合計ですか。 これももし見当違いの場合はお許し下さい。

e-l
質問者

補足

有難う御座います。まだ不慣れでうまくお伝えすることができず申し訳御座いません。 ファイル数の合計で結構です。ちょっと甘えていますが、先ほどのご回答のどこを改造すればよいのかがわかりません。Do Loopでご説明通りDir関数を用いてみつけたファイルを全て処理するプログラムを作りました。私なりに考えるのは、Do Loop内で何回の処理が行われたかをカウントすることでのみ、その処理数、つまりファイル総数が求められるということで、ProgressBar作成のためDo loop以前に処理数を知ることはできないのではと考えます。やはり、はじめにDir関数を使いファイルの総数を数えるためのコードが新たに必要なのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

他の質問の回答に使ったものですが(但しエクセルVBA) Private Sub test01() Dim fn As String Dim hn As String p01: fn = InputBox("フォルダ名=", "フォルダ指定", "c:\My Documents\") If fn = "end" Then Exit Sub ' fn = "c:\My Documents\" i = 2 sdirname = Dir(fn) Do While sdirname <> "" If Right(sdirname, 4) = ".csv" Then Cells(i, 1) = sdirname hn = fn & sdirname Cells(i, 2) = hn i = i + 1 End If '------ sdirname = Dir Loop GoTo p01 End Sub の「Do While sdirname <> ""」の部分が参考になりませんか。 もし見当違いの場合はお許し下さい。

e-l
質問者

補足

有難う御座います。しかし、あくまでProgressBar表示のための全処理数を知りたいのですが。もし、お分かりになれば宜しくお願い致します。

関連するQ&A