我在工作簿中有一张工作表(Sheet3),我想编写VBA以根据多个范围中的单元格值隐藏多行。 VBA必须经历两个不同的步骤;第一个是如果指定范围内的第一个单元格为空白,则隐藏整个范围(范围1除外,因为第一个单元格永远不会为空白)。第二步是如果范围中的第一个单元格不为空,则隐藏该范围中的行为空白。具体如下:
范围1
范围2
范围3
范围4
范围5
A251:A300-如果单元格A251为空白,则隐藏A251:A300。否则,隐藏范围A251:A300中所有空白的行。
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 = Sheet3
.Range("A11:A60", "A71:A120", "A131:A180", "A191:A240", "A251:A300").EntireRow.Hidden = False
For lngMyRow = 11 To 60
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
结束子
答案 0 :(得分:1)
您的问题#2, 3, 4, 5
都遵循类似的逻辑。
第一个i
循环处理#1
。代码的下一部分处理#2
。您只需复制/粘贴底部并更改测试值即可完成询问。
Option Explicit
Sub HideMe()
Dim i As Integer
With ThisWorkbook.Sheets("Sheet3")
For i = 11 To 60
.Range("A" & i).EntireRow.Hidden = .Range("A" & i) = vbNullString
Next i
'Repeat this portion for you other ranges that follow the same rules
If .Range("A" & 71) = vbNullString Then
.Range("A71:A120").EntireRow.Hidden = True
Else
For i = 72 To 120
.Range("A" & i).EntireRow.Hidden = .Range("A" & i) = vbNullString
Next i
End If
End With
End Sub
这可以通过
进行改进 A)使用For Each
循环而不是For i
循环
B)而不是一一隐藏行,而是将它们作为(Union
)添加到行集合中并一次隐藏Union