[[20160602093723]] 『マクロで処理中に処理経過状況を表示させる方法。』(ポポロン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで処理中に処理経過状況を表示させる方法。』(ポポロン)

お世話になっております。

名簿データを別シートにループで転記処理をしており
転記処理時間は、10秒程で完了しますが
経過状況を表示させたいと思います。

処理数は30名分で・・・
ループ毎に処理経過をメッセージボックスか、UserForm上のラベル?か何かに表示できないかと考えております。

処理実行

○○様・・・転記終了
○○様・・・転記終了
○○様・・・転記終了
○○様・・・転記終了



処理完了

ネットでは、プログレスバーなどは検索できましたが、上記処理については参考になるものを見つけることができませんでした。

皆さまどうかアドバイスの程よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


インタプリンタで処理の遅いExcelで進行状況表示する事は、更に遅くなるだけかと思いますよ?
とりあえず、ステータスバーを利用するのはコーディングが簡単なのですが、いかがでしょう?

 Sub test()
    Application.StatusBar = Now
 End Sub

(???) 2016/06/02(木) 09:55


ありがとうございました。

Application.StatusBar = "処理をしています... " & i

ヒントを手がかりに、上記のように、ループ回数を処理中であることが分かるようにしてみました。

できれば、登録者毎の進捗が表示できればと思います。
(ポポロン) 2016/06/02(木) 10:20


i だけ表示しても、いつ終わるのか判らないので、1/最大値 のようにするほうが良いでしょうね。
それと、人名にするならば、配列のi番目にするか、Cellsで値のある行列を指定すれば良いです。
(???) 2016/06/02(木) 10:23

 >>名簿データを別シートにループで転記処理をしており 
 >>転記処理時間は、10秒程で完了しますが 
 >>経過状況を表示させたいと思います。 

 重い処理なんでしょうね。

 でも・・・もしかして・・・その処理が 1秒で終われば、ステータス表示が、ほとんど意味のないものになりますね。

 現在のコードに手を入れれば 10秒が、ずっと縮まるかもしれませんね。
 そういった方向での対処は考えておられますか?

(β) 2016/06/02(木) 10:27


βさん

何時もありがとうございます。

こちらで、教わりながらコードを作成することができました。

配列等を駆使すれば高速化できると思いますが、現状コードが、私の頭脳と丁度バランスが取れているので、そのへんは妥協しました((T_T))

処理はPC能力によりますが、会社のパソコンで、処理時間は概ね10秒程度です。

表示の目的は

精神衛生的なもので、処理がきちんとされているか目視で名簿の進捗が可視化できればという欲の部分で質問をさせていただきました。

(ポポロン) 2016/06/02(木) 10:41


処理前に以下。
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

処理後に以下、とするだけでも、結構速くなったりするので、お試しを。

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

これで1秒で終わるようになるなら、進捗表示は不要にできますよね。
既に対策しており、変わらないようならば、まぁステータスバーでも。
(???) 2016/06/02(木) 11:10


???さん

アドバイスありがとうございます。

すでに導入しておりましたこと、伝え忘れておりました。すみません^_^
(ポポロン) 2016/06/02(木) 11:23


途中報告です

処理した登録者名を格納し

(ループ&格納処理)

Dim x2 As Range 'MsgBox用:処理address取得
Dim x3 As String 'MsgBox用:アドレ値格納
Dim msg As String 'MsgBox用:値

For Each x2 In sh1.Range(Cells(i, 2), Cells(i, 2))

x3 = x2.Value

(書き出し表示)メッセージボックスに、一気に書き出す処理を作成しました。

msg = msg & x3 & vbCrLf

ただ、処理終了後の結果を表示するだけで、経過が見られません。

やはりステータスバーにCountと登録者名を表示する方向で作成してみます。
(ポポロン) 2016/06/02(木) 13:00


セルに値セットの場合、表示更新を抑止しているので、見た目変わらないんですよ。
変えたければ、表示更新可能に戻して、DoEventsでも入れてCPUに描画の隙を作る、とかになります。

表示更新する分、それだけ完了までが遅くなってしまうので、止めた方が良い訳ですね。
これに対し、ステータスバーはExcel配下なので、マクロ実行より上位であり、表示できるというわけです。
(???) 2016/06/02(木) 13:21


【解決です】(^o^)

アドバイスありがとうございました。

ステータスバーに、今誰が処理中なのかを表示できるようにしました。
また、トータルの処理結果は、メッセージボックスに表示で対応しました。
(ポポロン) 2016/06/02(木) 17:32


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.