[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『プログレスバーを利用し、進捗を表示したいのですが...』(ayumi)
vba初心者になります。
このマクロ(標準モジュールで計算実行コマンドボタン)実行中に
プログレスバーを使用し、進捗を表示できればと思います。
ユーザーフォームにプログレスバーを設置し、標準モジュールコードを
あるサイトから取得しました。
それが、こちらになります。
Sub info表示()
Dim i As Long
info.Show vbModeless
For i = 1 To 30000
With info
.ProgressBar1.Value = i .パーセント.Caption = Int(i / 30000 * 100) & "%" .Repaint End With Next i info.Hide MsgBox "処理が終了しました。" Unload info End Sub
過去の先輩が作成したvbaを以下に記述させて頂きました。
この計算実行時にプログレスバーで進捗を表示できたらと思うのですが、
「Sub info表示()」〜をどこにどのように組み込めばいいか全く分かりません...
教えて頂けないでしょうか?
不可能であればそういった回答でも構いませんのでご協力頂きたいと
思って投稿しました。
Sub 計算実行()
確認 = MsgBox("計算を実行します。よろしいですか?" , 4)
Select Case 確認 Case vbYes GoTo 継続 Case vbNo End Select
End
継続:
Sheets("出力先").Select
'Sample time C2 ※指定数
'Data size C3 ※指定数
'データ(F2〜) ※9600固定
Dim inr(9600)
Dim fr(9600), fi(9600)
Z = Cells(2, "c")
n = Cells(3, "c")
For i = 0 To n - 1
inr(i) = Cells(i + 2, 6) '実測値取得
Next i
Pi = 3.14159265358979
'計算実行
For i = 0 To n - 1
sr = 0
si = 0
For k = 0 To n - 1
wr = Cos(2 * Pi * k * i / n)
wi = -Sin(2 * Pi * k * i / n)
sr = sr + inr(k) * wr
si = si + inr(k) * wi
Next k
fr(i) = sr '1
fi(i) = si '2
Next i
'Data Outデータ出力
For i = 0 To n - 1
Cells(i + 2, 9) = i / Z / n
Cells(i + 2, 10) = Sqr(fr(i) * fr(i) + fi(i) * fi(i)) / 4800
Next i
MsgBox "計算完了。"
End Sub
よろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
そして、このプロシジャは、バーが進む様をデモしているだけであり、これを呼び出しても、ご自分の処理は何も進みませんので、これを組み込む、という考えが間違っています。 このコード内で使われている命令を、ご自分のコード内で使用する事になります。 はっきり言って、進捗状態表示に手間をかけると処理時間が延びるので、どうやって実現すればわからないくらいなら、そんな処理は書かない方が良いですよ。背伸びしすぎです。 更には、変数宣言を省略しているような手抜きコードは、他人に見せてはいけません。 普段から「変数の宣言を強制する」オプションをオンにしておくべきです。
Sub 計算実行() Const Pi = 3.14159265358979 Dim Z Dim n Dim i Dim sr Dim si Dim k Dim wr Dim wi
If MsgBox("計算を実行します。よろしいですか?", vbYesNo Or vbQuestion, "確認") <> vbYes Then End End If
info.Show vbModeless Sheets("出力先").Select
'Sample time C2 ※指定数 'Data size C3 ※指定数 'データ(F2〜) ※9600固定 Dim inr(9600) Dim fr(9600), fi(9600) Z = Cells(2, "c") n = Cells(3, "c")
For i = 0 To n - 1 inr(i) = Cells(i + 2, 6) '実測値取得 Next i
'計算実行 With info .Show vbModeless .ProgressBar1.Max = n For i = 0 To n - 1 sr = 0 si = 0 For k = 0 To n - 1 wr = Cos(2 * Pi * k * i / n) wi = -Sin(2 * Pi * k * i / n) sr = sr + inr(k) * wr si = si + inr(k) * wi Next k fr(i) = sr '1 fi(i) = si '2
.ProgressBar1.Value = i + 1 .パーセント.Caption = Int(i / n * 100) & "%" .Repaint Next i End With
'Data Outデータ出力 For i = 0 To n - 1 Cells(i + 2, 9) = i / Z / n Cells(i + 2, 10) = Sqr(fr(i) * fr(i) + fi(i) * fi(i)) / 4800 Next i
MsgBox "計算完了。", vbInformation Unload info End Sub
なお、参考元のinfo表示プロシジャですが、表示更新する回数が3万回もあるのが、私は気に入りませんね。パーセントは100回しか変わらないのだから、ラベルに変化があるときだけ表示更新するのがベストだと思います。 余力があるときにでも考えてみてください。
(???) 2018/01/31(水) 09:44
作戦1
ステータスバーを使って進行状況を表示する。
https://www.moug.net/tech/exvba/0150098.html
http://officetanaka.net/excel/vba/tips/tips13.htm
作戦2
ユーザーフォームをモードレスで表示させて、任意のメッセージ(進行状況)を表示する
という手もあります。
※作戦2のほうは、ユーザーフォームの説明になっちゃうのでurlは省略します。
(もこな2) 2018/01/31(水) 09:51
Sub 計算実行() Const Pi = 3.14159265358979 Dim Z Dim n Dim i Dim sr Dim si Dim k Dim wr Dim wi Dim iw As Long
If MsgBox("計算を実行します。よろしいですか?", vbYesNo Or vbQuestion, "確認") <> vbYes Then End End If
Sheets("出力先").Select
'Sample time C2 ※指定数 'Data size C3 ※指定数 'データ(F2〜) ※9600固定 Dim inr(9600) Dim fr(9600), fi(9600) Z = Cells(2, "c") n = Cells(3, "c")
For i = 0 To n - 1 inr(i) = Cells(i + 2, 6) '実測値取得 Next i
'計算実行 With info For i = 0 To n - 1 sr = 0 si = 0 For k = 0 To n - 1 wr = Cos(2 * Pi * k * i / n) wi = -Sin(2 * Pi * k * i / n) sr = sr + inr(k) * wr si = si + inr(k) * wi Next k fr(i) = sr '1 fi(i) = si '2
If iw <> Int((i + 1) / n * 100) Then iw = (i + 1) / n * 100 Application.StatusBar = String(Int(iw / 10), "■") & String(10 - Int(iw / 10), "□") & iw & "% " End If Next i End With
'Data Outデータ出力 For i = 0 To n - 1 Cells(i + 2, 9) = i / Z / n Cells(i + 2, 10) = Sqr(fr(i) * fr(i) + fi(i) * fi(i)) / 4800 Next i
MsgBox "計算完了。", vbInformation Application.StatusBar = "" End Sub (???) 2018/01/31(水) 09:58 (10:16 整数化を忘れていた等、若干変更)
もこな2さま
その他のアイデア提供していただきありがとうございました。
(ayum i) 2018/01/31(水) 13:45
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.