• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA Progress barが動作しない)

VBA Progress barが動作しない

このQ&Aのポイント
  • 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

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.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 ではないかと? 投稿用にタブインデントの代わりに全角スペースを使用しています。 なお、上記の場合はアクティブなシートに処理が走りますので シートの指定をするコードを足した方が良いかもです。

t2grp
質問者

お礼

添削ありがとうございます 上述VBA記述で、無事動作しました ただ実際はサブルーチンが、もう1つあって、それと合わせるとProgress Barが終わっても、マクロが止まりません これはもう少し検証してみたいと思います

関連するQ&A