- 締切済み
ExcelVBA 進行状況ダイアログ
VISTA Excel2007です。 ある作業のVBAを作成して動かしています。 結構時間が掛るので進行状況をダイアログで表示をしたいのですがどうすればいいのかお教えください。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- kmetu
- ベストアンサー率41% (562/1346)
> ご回答いただいた内容でいろいろ実行してみましたがうまくいかず暗礁に乗り上げています なにを色々実行したのか不明ですし 基本的にプログレスバーの処理を理解できていないのでしたら プログレスバーの処理だけのコードを作成してまず理解してください。
- cistronezk
- ベストアンサー率38% (120/309)
ループ処理ではないのですね。 どの処理に一番時間が掛かっているかが判らないので、私が提示したStatusBarでやるなら、各処理の前に 「1/10(処理名)実行中・・・」などと地道にコードを挿入することになります。処理の全件数と現在何番目を処理中かを表示します。具体的には、 ・・・ Application.StatusBar="1/10(Ca__左側総合計とNG処理)実行中・・・" Ca__左側総合計とNG処理 Application.StatusBar="2/10(Ca__必要列を右側にコピーして整理)実行中・・・" Ca__必要列を右側にコピーして整理 ・・・ という感じです(数字はいい加減です)。必要なら、時間が掛かっているサブルーチンの中や、セルの色を付けている処理の中にも記述します。 ただ、この方法ではどうしてもあちこちに Application.StatusBar="・・・" というコードを書き散らすことになるのが欠点です。
- cistronezk
- ベストアンサー率38% (120/309)
すでにひととおり回答が出ているのに、一体何がお望みなのでしょう? もっと具体的に状況を書いていただかないと、有効な回答は付かないと思いますが・・・
補足
スミマセン 勉強しながらプログラミングしている素人です。 必要な個所を記述します。 ゲームのスコア集計のプログラミングです。 順位を決めるのにいろいろ条件があります。 別にユーザーフォームがあり、コマンドボタンをクリックするとこの標準モジュールへ飛んで集計をします。集計人数が多いと時間がかかるのでプログレスバーで進行状況を目で見れるようにしたいのです。 ご回答いただいた内容でいろいろ実行してみましたがうまくいかず暗礁に乗り上げています。 VBA記述が良く分かっていないので出来ないようです。 ご指導いただければ幸いです。 Sub 競技スコア集計() Sheets("競技").Select Dim R_end2& Range("BQ1048576").End(xlUp).Select R_end2 = Selection.Row If R_end2 >= 7 Then Range(Cells(7, 66), Cells(R_end2, 100)).Select Selection.Clear With Selection.Font .Name = "MS Pゴシック" End With Selection.NumberFormatLocal = "G/標準" Range("BO7").Select End If '--------------------------------------- Ca__左側総合計とNG処理 Ca__必要列を右側にコピーして整理 Cb__総合計と1打での並べ替え Cc__総合計と1打での順位書込_必要 Cd__4条件での並替_必要 Ce__4条件での順位書込_必要 Ch__右側表の整列_必要 Dim Vs1$, Vs2$ ' R_end2 は右側の表の最終行 Dim N1%, N2%, N3%, N4%, Color% Dim Vo$, V2$, V3$, V1$, V4$, V5$ Range("BO1048576").End(xlUp).Select R_end2 = Selection.Row Range("BO7").Select Color = 34 For N1 = 7 To R_end2 - 1 Vs1 = Cells(N1, 66).Value Vs2 = Cells(N1 + 1, 66).Value If Vs1 = Vs2 Then Range(Cells(N1, 97), Cells(N1 + 1, 97)).Select 'Range("AY N1:AY N1+1")のこと With Selection.Interior .ColorIndex = Color .Pattern = xlSolid End With '-------------------------- ElseIf Vs1 <> Vs2 And Color = 34 Then Color = 24 ElseIf Vs1 <> Vs2 And Color = 24 Then Color = 34 End If Next Range(Cells(7, 66), Cells(R_end2, 100)).Select With Selection.Font .Name = "MS Pゴシック" End With Selection.NumberFormatLocal = "G/標準" End Sub
- kmetu
- ベストアンサー率41% (562/1346)
> 進行しているのか否かを目で確かめられるようにしたいのです。 それがプログレスバーなんですが…基本的だと思いますが… プログレスバーで駄目だとなるとどのようなものをお望みでしょうか?
補足
スミマセン 勉強しながらプログラミングしている素人です。 必要な個所を記述します。 ゲームのスコア集計のプログラミングです。 順位を決めるのにいろいろ条件があります。 別にユーザーフォームがあり、コマンドボタンをクリックするとこの標準モジュールへ飛んで集計をします。集計人数が多いと時間がかかるのでプログレスバーで進行状況を目で見れるようにしたいのです。 ご回答いただいた内容でいろいろ実行してみましたがうまくいかず暗礁に乗り上げています。 VBA記述が良く分かっていないので出来ないようです。 ご指導いただければ幸いです。 Sub 競技スコア集計() Sheets("競技").Select Dim R_end2& Range("BQ1048576").End(xlUp).Select R_end2 = Selection.Row If R_end2 >= 7 Then Range(Cells(7, 66), Cells(R_end2, 100)).Select Selection.Clear With Selection.Font .Name = "MS Pゴシック" End With Selection.NumberFormatLocal = "G/標準" Range("BO7").Select End If '--------------------------------------- Ca__左側総合計とNG処理 Ca__必要列を右側にコピーして整理 Cb__総合計と1打での並べ替え Cc__総合計と1打での順位書込_必要 Cd__4条件での並替_必要 Ce__4条件での順位書込_必要 Ch__右側表の整列_必要 Dim Vs1$, Vs2$ ' R_end2 は右側の表の最終行 Dim N1%, N2%, N3%, N4%, Color% Dim Vo$, V2$, V3$, V1$, V4$, V5$ Range("BO1048576").End(xlUp).Select R_end2 = Selection.Row Range("BO7").Select Color = 34 For N1 = 7 To R_end2 - 1 Vs1 = Cells(N1, 66).Value Vs2 = Cells(N1 + 1, 66).Value If Vs1 = Vs2 Then Range(Cells(N1, 97), Cells(N1 + 1, 97)).Select 'Range("AY N1:AY N1+1")のこと With Selection.Interior .ColorIndex = Color .Pattern = xlSolid End With '-------------------------- ElseIf Vs1 <> Vs2 And Color = 34 Then Color = 24 ElseIf Vs1 <> Vs2 And Color = 24 Then Color = 34 End If Next Range(Cells(7, 66), Cells(R_end2, 100)).Select With Selection.Font .Name = "MS Pゴシック" End With Selection.NumberFormatLocal = "G/標準" End Sub
- kmetu
- ベストアンサー率41% (562/1346)
プログレスバーコントロールで進捗状況を表示するには? http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv9g1810.html 参考にしてください。
補足
質問内容の不備ですみません。 作業内容は結構複雑で、集計ソフトのようなものです。 集計、並び替え、条件分岐等多岐にわたっていてユーザーフォームを作成して、コマンドボタンで一連の作業を行います。 標準モジュールも数個に分けて記述していて、一度の命令で複数の標準モジュールを渡って動かしています。条件が複雑で結構何分と時間がかかる場合が多く、その為進行状況を何らかの形でユーザーに知らせ、進行しているのか否かを目で確かめられるようにしたいのです。 説明不足でご迷惑をおかけしますがなにとぞよろしくお願いします。
- xls88
- ベストアンサー率56% (669/1189)
こんなのがヒットしました。 [XL] ユーザー フォームでプログレス バーを表示する方法 http://support.microsoft.com/kb/211736/ja
補足
質問内容の不備ですみません。 作業内容は結構複雑で、集計ソフトのようなものです。 集計、並び替え、条件分岐等多岐にわたっていてユーザーフォームを作成して、コマンドボタンで一連の作業を行います。 標準モジュールも数個に分けて記述していて、一度の命令で複数の標準モジュールを渡って動かしています。条件が複雑で結構何分と時間がかかる場合が多く、その為進行状況を何らかの形でユーザーに知らせ、進行しているのか否かを目で確かめられるようにしたいのです。 説明不足でご迷惑をおかけしますがなにとぞよろしくお願いします。
- cistronezk
- ベストアンサー率38% (120/309)
ダイアログでなくステータスバーの例です。 http://officetanaka.net/excel/vba/tips/tips13.htm 数万件以上の処理の場合、表示だけでも時間が掛かるので100件とか1000件単位で表示させた方がいいでしょう。
補足
質問内容の不備ですみません。 作業内容は結構複雑で、集計ソフトのようなものです。 集計、並び替え、条件分岐等多岐にわたっていてユーザーフォームを作成して、コマンドボタンで一連の作業を行います。 標準モジュールも数個に分けて記述していて、一度の命令で複数の標準モジュールを渡って動かしています。条件が複雑で結構何分と時間がかかる場合が多く、その為進行状況を何らかの形でユーザーに知らせ、進行しているのか否かを目で確かめられるようにしたいのです。 説明不足でご迷惑をおかけしますがなにとぞよろしくお願いします。
お礼
ご丁寧にご説明いただき有難うございました。 もう少し勉強してから取り組んでみます。