Например, следующий сразу после вашего предыдущего цикла? Более эффективно использовать Union, чтобы собрать подходящие строки (если все в одном листе) вместе и спрятаться за один раз. Таким образом, вы можете собрать подходящие строки из обоих циклов (вы также можете объединить циклы в них) и скрыть все сразу.
For lngMyRow = 13 To 9 Step -1 'Need to work backwards through the rows when hiding or deleting
wsMySheet.Range("B" & lngMyRow).EntireRow.Hidden = (wsMySheet.Range("B" & lngMyRow) = vbNullString)
Next lngMyRow
Спасибо @ScottCraner за то, что он указал на очень хорошую стенографию.
Два цикла с объединением диапазонов могут выглядеть (не проверено):
Option Explicit
Public Sub HideRowsSummary()
Dim wsMySheet As Worksheet
Dim lngMyRow As Long, unionRng As Range
Application.ScreenUpdating = False
For Each wsMySheet In ThisWorkbook.Sheets
Select Case wsMySheet.NAME
Case Is = "Summary 1", "Summary (2)", "Summary (3)", "Summary (4)"
With wsMySheet
.Range("A9:A13, A24:A74").EntireRow.Hidden = False
For lngMyRow = 9 To 13
If .Range("B" & lngMyRow) = vbNullString Then
If Not unionRng Is Nothing Then
Set unionRng = Union(unionRng, .Range("B" & lngMyRow))
Else
Set unionRng = .Range("B" & lngMyRow)
End If
End If
Next lngMyRow
For lngMyRow = 24 To 73
If Len(.Range("A" & lngMyRow)) = 0 Then
If Not unionRng Is Nothing Then
Set unionRng = Union(unionRng, .Range("A" & lngMyRow))
Else
Set unionRng = .Range("A" & lngMyRow)
End If
End If
Next lngMyRow
End With
End Select
If Not unionRng Is Nothing Then unionRng.EntireRow.Hidden = True
Set unionRng = Nothing
Next wsMySheet
Application.ScreenUpdating = True
End Sub