- ベストアンサー
リアルタイムでForループを表示
Excel2010でVBAを使っています。 一つのループの計算のために10秒くらいかかるForループを10000回繰り返すプログラムを作った場合、 計算が終了するまでに30分程度時間がかかります。 計算途中にどこまで計算が進んだか分かるようにするため ダイアログにリアルタイムで変数iを表示できるようなプログラムを書きたいのですが どのようにすれば良いですか? Matlabだと「;」をつけないといった方法があるのですが VBAでやり方を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
fStopは同一モジュール内ではないので、Dimではなく、Publicにして下さい。 ’Userform1のモジュール Private Sub CommandButton1_Click() fStop = True End Sub '標準モジュール Public fStop As Boolean Sub macro() UserForm1.Show vbModeless For i = 1 To 10000 For j = 1 To 10000 DoEvents UserForm1.TextBox1.Value = i Next If fStop = True Then MsgBox "処理が中断されました" Exit For End If Next End Sub
その他の回答 (3)
- kybo
- ベストアンサー率53% (349/647)
Ano.2の回答を単純にユーザーフォームに表示すればいいだけだと思いますが。 UserForm1にTextBox1を配置の上、実行すれいいです。 Sub macro() UserForm1.Show vbModeless For i = 1 To 10000 For j = 1 To 10000 DoEvents UserForm1.TextBox1.Value = i Next Next End Sub
お礼
ありがとうございます。 うまくいきました。 後一つだけ質問させていただきたいのですが、 http://officetanaka.net/excel/vba/function/DoEvents.htm ここのページに書かれてある方法で、 If fStop = True Then MsgBox "処理が中断されました" Exit For End If をforループ内に書いた上で、コマンドボタンを使って Private Sub Command1_Click() fStop = True End Sub というコードを実行することでプログラムを途中で終了させるボタンを作りたいのですが、 この通りにやってもforループから抜け出ることができません。 どこを改良すれば良いのでしょうか?
- kybo
- ベストアンサー率53% (349/647)
こういうことでしょうか? Sub macro() For i = 1 To 10000 For j = 1 To 10000 DoEvents Range("A1").Value = i Next Next End Sub
お礼
ありがとうございます。 所望していたのはこの操作です。 でも、この方法だと、毎回A1セルが表示されるようにした状態でVBAを実行する必要があるわけですよね? やはりダイアログボックスで表示させることってできないのでしょうか? 自分でも調べてみたのですが、 どうしてもOKとかボタンを押さないと計算が前に進まない方法しか見つからないのですが・・・ 何か良い方法があれば教えて下さい。
- watabe007
- ベストアンサー率62% (476/760)
>計算途中にどこまで計算が進んだか分かるようにするため こんにちは、 プログレスバーコントロールを使うと良いでしょう
お礼
ありがとうございます。 この方法だと進行状況がアナログで表示されるわけですよね? 複雑なプログラムになってくると、複数の変数を同時にモニタリングする必要があるのですが。 for i = 1 to 10000 for j = 1 to 10000 next next みたいな文を書いて、 iをとjリアルタイムでモニタリングしたいのですが、 http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_msgbox.html ここのページに書かれてある方法では、 いちいちOKボタンを押さないと計算が前に進まないわけですが ボタンを押さずにiだけが表示される方法ってないのでしょうか?
お礼
ありがとうございます。 勉強になりました。