カンパ〜イ!←最初の1杯目、なに頼む?

マクロを利用して各シートの行を非表示にしたいです。
下記のようにマクロを書いたのですが、実行すると1分ほどかかってしまいます。
マクロ初心者のため、どうしたら早く処理できるように変更できるかわかりません。
複数のシートを同時に実行したいです。
どうすれば早くなるでしょうか。
ご教授願います。


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub sample6()
Application.ScreenUpdating = False
Dim LastRow As Long
Dim i As Long
Dim wst1 As Worksheet
Dim wst2 As Worksheet
Dim wst3 As Worksheet
Dim wst4 As Worksheet

Set wst1 = Worksheets("●")
Set wst2 = Worksheets("▲")
Set wst3 = Worksheets("■")
Set wst4 = Worksheets("★")


LastRow = Cells(Rows.Count, 7).End(xlUp).Row

For i = 28 To 418
If wst1.Cells(i, 7) = 0 Then
wst1.Rows(i).Hidden = True
End If

If wst2.Cells(i, 7) = 0 Then
wst2.Rows(i).Hidden = True
End If

If wst3.Cells(i, 7) = 0 Then
wst3.Rows(i).Hidden = True
End If


If wst4.Cells(i, 7) = 0 Then
wst4.Rows(i).Hidden = True
End If


Next i


Application.ScreenUpdating = True

End Sub

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

A 回答 (2件)

nunohiraさんの書いたマクロ自体に時間のかかる要素はないはずです。


時間がかかるは、そのシートに含まれる計算式の再計算が原因と思われます。
試しに、計算方法を「手動」にしてから、マクロを実行してみてください。
これにより、お望みのパフォーマンスが得られるようであれば、計算方法の
切り替えをマクロに組み込んで下さい。
    • good
    • 0

以下でどうなりますか



Public Sub Samp1()
  Dim v As Variant
  Dim rng As Range
  Dim i As Long

  Application.ScreenUpdating = False
  For Each v In Array("●", "▲", "■", "★")
    With Worksheets(v)
      Set rng = Nothing
      For i = 28 To 418
        If (.Cells(i, 7) = 0) Then
          If (rng Is Nothing) Then
            Set rng = .Cells(i, 7)
          Else
            Set rng = Union(rng, .Cells(i, 7))
          End If
        End If
      Next
      If (Not rng Is Nothing) Then
        rng.EntireRow.Hidden = True
      End If
    End With
  Next
  Application.ScreenUpdating = True
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報