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

时间:2018-02-01 15:45:51

标签: excel vba excel-vba

我已经尝试了一段时间来编写代码,如果该行的初始单元格值为空,则会隐藏多个范围内的行。在某些情况下,此电子表格是客户的报价,其中包含我们提供的所有产品作为订单项。显然,如果客户没有订购产品,我们不希望在他们的报价中显示该行。这是我尝试过的代码,但不断发现"下标超出范围"错误,甚至" _global"错误。任何输入都会受到赞赏,因为我的编码技巧充其量只是最基本的。谢谢!

Sub quickhide()

Dim r1 As Range, r2 As Range, r3 As Range, r4 As Range, r5 As Range, 
MultiRange As Range
    Set r1 = Sheets("Sheet1").Range("A13:A28")
    Set r2 = Sheets("Sheet1").Range("A31:A35")
    Set r3 = Sheets("Sheet1").Range("A41:A48")
    Set r4 = Sheets("Sheet1").Range("A51:A54")
    Set r5 = Sheets("Sheet1").Range("A57:A58")
    Set MultiRange = Union(r1, r2, r3, r4, r5)

        If MultiRange.Value = "" Then
            MultiRange.EntireRow.Hidden = True
        Else
            MultiRange.EntireRow.Hidden = False
        End If
End Sub

2 个答案:

答案 0 :(得分:1)

试试这个

Sub quickhide()

Dim r1 As Range, r2 As Range, r3 As Range, r4 As Range, r5 As Range, MultiRange As Range, r As Range

Set r1 = Sheets("Sheet1").Range("A13:A28")
Set r2 = Sheets("Sheet1").Range("A31:A35")
Set r3 = Sheets("Sheet1").Range("A41:A48")
Set r4 = Sheets("Sheet1").Range("A51:A54")
Set r5 = Sheets("Sheet1").Range("A57:A58")
Set MultiRange = Union(r1, r2, r3, r4, r5)

For Each r In MultiRange
    r.EntireRow.Hidden = (r.Value = vbNullString)
Next r

End Sub

答案 1 :(得分:0)

替代方案可能对您更友好:

将您正在使用的数据放入表格中。转到绿色功能区中的“数据”选项卡(在Excel 2016中)。将表导入Power Query。过滤您的第一行以删除空白(或" null")值。进行您喜欢的任何其他转换和"关闭并加载"到一个新的工作表。格式化该表并将其发送给您的客户。

您只需刷新表格即可考虑数据表中的任何更改。

杰克