• ベストアンサー

Do~Loopした回数をカウントしたい

フォルダ内に数千件あるcsvファイルのデータを他のBookにまとめるマクロを作成しました しかし、1000~5000件のデータを処理させると時間がかかるため、いつ終わるのか目途がたちません。 よって何件中何件処理が進んでいるのか?を知りたいです。 結果として、マクロ処理中に画面上に「**件/5000件処理中」みたいな感じでカウントアップしている表示をさせたい よってLoopした回数をカウントすればよいと思うのですが Loop回数のカウント方法がわかりません 教えていただきたく よろしくお願いいたします。 フォルダ内の全ファイル件数はカウントすることはできています。

質問者が選んだベストアンサー

  • ベストアンサー
  • NURU_osan
  • ベストアンサー率50% (297/593)
回答No.1

仮にDoの後に繰り返し条件があって、繰り返している処理回数を変数Cに格納するとして・・・ Dim C As Integer (もしくはLong) ' C=0 Do --繰り返しの条件-- C=C+1 --繰り返す処理-- Loop

kyy0108
質問者

お礼

ありがとうございました! できました!

その他の回答 (1)

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.2

内部処理の処理時間よりも外部出力(件数の表示)の方が格段に処理の負荷が高い 貴方のしようとしていることは、いつ終わるか目処が立たない処理を更に更に遅くする事になるんだが・・・・ ソレって本末転倒ではないのか? もしかして、Bookに貼り付ける際に画面更新を停止していないから、セル更新の都度画面のリフレッシュが行われて重い処理になってるんでないのか? Application.ScreenUpdating = False してる?

kyy0108
質問者

お礼

アドバイスありがとございます! Application.ScreenUpdating = False 見よう見まねで入れてるんですが これも処理時間短縮に意味があるんですね! ありがとうございました。

関連するQ&A

  • Do - Loop文

    VB6の質問です。 受取データが、桁数は不定で、たて続けにきます。 そして、毎回ごとのデータを記録します。 記録用の変数は回数分、作成する必要があると思いますが、対処方法がわかりません。 宜しくお願い致します。 Dim Record As String '記録 Dim Data As String Do ・ ・  Data = (受取りデータ1)、(受取りデータ2)..... Recoed = Data Loop until Data = ""

  • 複数のシートに対してDo~Loopで処理を繰り返したいのですが処理を止める構文が解りません。

    処理の度にシート数が変わるブックで同じマクロを繰り返したいのですが、すべてのシートを選択してマクロを実行したところマクロに範囲指定→ソートの部分があり、処理が止まってしまいます。そこでDo~Loopを使用して順番にマクロを処理していこうと思うのですが、マクロを止める構文がよく解りません。 VBA初心者なものでいろいろ調べて以下のようなものを考えてみたのですがエラーになってしまいます。どなたかお助けください。 Do Until ActiveSheet.Previous.Is Nothing Application.Run "PERSONAL.XLS!Macro101" ActiveSheet.Previous.Activate Loop End Sub

  • バッチファイルでカウントアップするには

    :loop set id=0 if '%1' == '' goto end cd %1 if exist %1 for %%i in (*.bmp) do ( set id+=1 echo %id% ) shift goto loop :end pause バッチファイルをSend Toフォルダにおいて 送られてきた画像データをカウントアップしていきながら名前を id.bmp変えていきたいのですが、 idをカウントアップさせたいのですが方法がわかりません。 どうすればカウントアップされるのでしょうか?

  • ブック.csvを開かずに他のブック.xlsに貼付け

    フォルダ内の複数あるcsvデータを (1)ブック.csvを開く (2)ブック内のデータをソートする (3)データをコピーする (4)貼り付け用ブック.xlsに貼り付け をloopさせ実行させています 処理を少しでも早くするために ブック.csvを開かずに(2)~(4)を実行できれば早くなるのかな?と考えています ブック.csvを開かずに(2)~(4)を実行させることは可能でしょうか? それとも、あまり意味がないでしょうか? ちなみに画面更新を停止するための Application.ScreenUpdating = False はプログラム内に入れています 以上、よろしくお願いいたします。

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

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

  • 【VBA】データが途切れた回数をカウントする方法

    添付画像のような1行ごとにデータが入力されている表があります。 このデータには、データが入力されているセルと空白セル(黄色のセル)があります。 1行ごとに、最初にデータが入力されたセルから最後にデータが入力されたセルまでの間に、空白が発生した回数が何回あるのかをカウントしたいと思っております。 空白セルの数をカウントするのではなく、データが途切れた回数をカウントしたいのです。 VBAを使って、上記のような処理は可能でしょうか? 私は現在VBAを勉強中で知識が浅いため分かりませんでした。 もし可能であれば、その方法を教えていただけると大変助かります。 お手数お掛けいたしますが、よろしくお願い致します。

  • LOOPやFor文で出来ないでしょうか。

    いつもお世話になっております。 現在帳票出力のコーディングをしております。 帳票は8レコードで一枚で、 8レコード以下になると、罫線が印刷されないため、 ブランクのデータを作ることで対応しようと思っています。 そこでブランクを入れる処理についてなのですが、 データ件数が8の倍数まで処理をつづけたいのですが どのように記述すればいいか思案に苦しんでおります。 Do Until KANRI_TANA_KENSU = 8 Or 16 Or 24 Or 32 Or 40 Or 48 Or 56 Or 64 Or 72 RS_BLANK.AddNew RS_BLANK!区分 = "BLANK" RS_BLANK.Update Loop とりあえず、一つのグループに30件以上はないので数値を固定化させたのですが 勿論これではダメだというのは理解しているのですが。。。 イメージとしては 件数カウントしている数値を8で割り、その答えが 8の倍数でない場合は小数点が出ると思います。 要するに、整数というか小数点が出なくなるまで加算させるという条件が できればいいのかなと思っているのですが それをコーディングにするにはどうすれば。。。と思っている次第です。 他の方法でも結構ですので何か案が御座いましたら ご教示いただけませんでしょうか。

  • Access→csv カウント数メッセージ

    こんにちは Access2010を使用しています。 Accessからcsvファイルをエクスポートするシステムを作成中なのですが、 例えば、フォームのcsvエクスポート実行のマクロボタンをクリックすると「○○件のデータをエクスポートします。 よろしいですか?」みたいなメッセージが出たら幸いと思いまして。。。 現在は、フォームの実行ボタンをクリックすると、黙って指定したフォルダへのcsvエクスポートが完了してい ます。なので、データ数はcsvファイルを開くまで分かりません。 元になるクエリには[状況]というフィールドが[受注]のみという抽出条件なので、毎回データ数が違います。 何分、VBAが未習得でして。。。フォーム内の実行ボタンのプロパティシートの何処かに何か入れる 様なイメージなのかな?くらいしか分かりません。 出来れば、モジュール画面からの編集は避けたいです。 どなたかお分かりになる方宜しくお願い致します。 宜しくお願い致します。

  • BULKINSERT時の件数表示について

    Batファイルを作成し、CSVファイルをBULKINSERTにて DBに挿入しています。 FORループを使用し、フォルダに存在するテーブル名.txtの数だけ 処理を繰り返しています。 処理中に「(XXX 行処理されました)」が表示されない場合があります。 (挿入されたデータ件数には問題なく、  フォルダのCSVファイルが1件の場合には表示されます) 必ず「(XXX 行処理されました)」を表示させる方法があるのでしょうか? ※SQL Server 7.0のでは、表示されていました 環境  OS:Windows Server 2003  DB:SQL Server 2005

  • VBA Do~Loopについて

    VBA勉強中です。 マクロの作成は完了しているのですが、処理効率について指摘を受け、 その際に助言もいただいたのですが、自身の勉強不足、理解不足で どのように変更すれば良いのか分からず、教えていただきたいです。 Do While Ax2 <= 30 で30回繰り返すのではなく (Cells(Ax2,"B").Value <> "" ) の間繰り返すように変更したいです。 ---------------- Sub test()  Dim File1(30) As string  Dim Sheet1(30) As string  Dim Sheet2(30) As string  Dim Cnt As Integer  Ax1=1  Ax2=7  Do While Ax2 <= 30    If Cells(Ax2, "B").Value <> "" Then     File1(Ax1) = Cells(Ax2, "B").Value     Sheet1(Ax1) = Cells(Ax2, "C").Value     Sheet2(Ax1) = Cells(Ax2, "D").Value     Cnt =Ax1    End If    Ax1 = Ax1 + 1    Ax2 = Ax2 + 1  Loop End Sub ---------------- お手数ですが、よろしくお願いいたします。

専門家に質問してみよう