根据多个范围单元格值VBA隐藏多行

时间:2018-08-28 16:20:21

标签: vba excel-vba excel-formula excel-2010 is-empty

我在工作簿中有一张工作表(Sheet3),我想编写VBA以根据多个范围中的单元格值隐藏多行。 VBA必须经历两个不同的步骤;第一个是如果指定范围内的第一个单元格为空白,则隐藏整个范围(范围1除外,因为第一个单元格永远不会为空白)。第二步是如果范围中的第一个单元格不为空,则隐藏该范围中的行为空白。具体如下:

范围1

  1. A11:A60-隐藏范围空白的行

范围2

  1. A71:A120-如果单元格A71为空白,则隐藏A71:A120。否则,隐藏范围A71:A120中所有空白的行。

范围3

  1. A131:A180-如果单元格A131为空白,则隐藏A131:A180。否则,隐藏范围A131:A180中所有空白的行。

范围4

  1. A191:A240-如果单元格A191为空白,则隐藏A191:A240。否则,隐藏范围A191:A240中所有空白的行。

范围5

  1. 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
    

    结束子

1 个答案:

答案 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