- ベストアンサー
VBA Progress barが動作しない
- VBA初心者です。Progress barを追加したいのですが、上手く動きません。おそらく記述位置が間違っていると思われますので、どこにどうやったら良いか教えて頂けませんか?
- Excel2003(32bit)を使用しています。i-1行目まで数える際に、Progress barを動作させたいです。Userform1にProgress bar2を追加しています。
- Sub progress_bar () Dim i As Variant Dim k As Variant Userform1.Show False DoEvents For k = 1 To i Userform1.ProgressBar2.Value = k / i * 100 'i-1行目までで必要な行(0かつブランク)を1、不要な行(それ以外)を2とフラグを付ける For i = 2 To 30000 If Cells(i, 5) = "" Then Exit For If Cells(i, 13) = 0 And Cells(i, 26) = "" Then Cells(i, 81) = 1 Else: Cells(i, 81) = 2 End If Next Next Userform1.Hide End sub
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
30000行目まで処理を行いたい・・らしいと考えて 拙いところは Sub progress_bar () Dim i As Variant★あえてVariant型にする必要はありません→Long Dim k As Variant★同上 Userform1.Show False DoEvents For k = 1 To i ★ i は値を持ってないので、即終了です Userform1.ProgressBar2.Value = k / i * 100 '処理件数 / 総件数 * 100 ★ 割り算の順序が逆 'i-1行目までで必要な行(0かつブランク)を1、不要な行(それ以外)を2とフラグを付ける For i = 2 To 30000 If Cells(i, 5) = "" Then Exit For ★個人的に可読性が下がりそうなので If Cells(i, 13) = 0 And Cells(i, 26) = "" Then Cells(i, 81) = 1 Else: Cells(i, 81) = 2 ★ここも個人的に End If Next Next Userform1.Hide End sub なので Sub progress_bar() 'i-1行目までで必要な行(0かつブランク)を1、不要な行(それ以外)を2とフラグを付ける Dim i As Long Dim k As Long k = 30000 UserForm1.Show vbModeless DoEvents '必要なのか否かは分かりません For i = 2 To k If Cells(i, 5) = "" Then UserForm1.Hide '要るでしょ? Exit For End If If Cells(i, 13) = 0 And Cells(i, 26) = "" Then Cells(i, 81) = 1 Else Cells(i, 81) = 2 End If UserForm1.ProgressBar2.Value = i / k * 100 '処理件数 / 総件数 * 100 Next UserForm1.Hide End Sub ではないかと? 投稿用にタブインデントの代わりに全角スペースを使用しています。 なお、上記の場合はアクティブなシートに処理が走りますので シートの指定をするコードを足した方が良いかもです。
お礼
添削ありがとうございます 上述VBA記述で、無事動作しました ただ実際はサブルーチンが、もう1つあって、それと合わせるとProgress Barが終わっても、マクロが止まりません これはもう少し検証してみたいと思います