Excel 如何隐藏某一列中包含空白单元格的所有行?

Excel 如何隐藏某一列中包含空白单元格的所有行?,excel,vba,loops,Excel,Vba,Loops,我试图隐藏在某一列(SOW选项卡中的H列)中有空白单元格的所有行 此宏(不同的行但相同的语法)用于此工作簿的第三个选项卡。我检查过了,范围内的每一行都是正确的。是不是射程太长了 Sub HideRowsInSOW_LOOP() Dim r As Range, c As Range Set r = Range("H27:H46,H48:H67,H69:H88,H90:H109,H111:H130,H132:H151,H153:H172,H174:H193,H195:H214,H216:H235,H

我试图隐藏在某一列(SOW选项卡中的H列)中有空白单元格的所有行

此宏(不同的行但相同的语法)用于此工作簿的第三个选项卡。我检查过了,范围内的每一行都是正确的。是不是射程太长了

Sub HideRowsInSOW_LOOP()
Dim r As Range, c As Range
Set r = Range("H27:H46,H48:H67,H69:H88,H90:H109,H111:H130,H132:H151,H153:H172,H174:H193,H195:H214,H216:H235,H237:H256,H258:H277,H279:H298,H300:H319,H321:H340,H342:H361,H369:H388,H390:H409,H411:H430,H432:H451,H453:H472,H474:H493,H495:H514,H516:H535,H537:H556,H558:H577,H579:H598,H600:H619,H621:H640,H642:H661,H663:H682,H684:H703")
Application.ScreenUpdating = False
For Each c In r
    If c.Value = 0 Then
        c.EntireRow.Hidden = True
    Else
        c.EntireRow.Hidden = False
    End If
Next c
Application.ScreenUpdating = True
End Sub

运行此操作时,出现以下错误:

运行时错误“1004”错误消息:对象的方法“范围” “\u Global”失败


我有一个长得多的宏,它成功地达到了相同的目的,我担心它会减慢我的工作簿/继续听循环更好。

由于范围不完全合格,您的代码可能无法用于相关工作表<代码>设置r=范围(“H27:H46,。范围指的是活动表

这是一个使用<代码>自动筛选器>代码>的方法,它将隐藏列中的空白行。这比在一个巨大的数据集中循环要快得多。

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long
    Dim rngColH As Range
    Dim rngToHide As Range

    '~~> Chage this to the relevant sheet
    Set ws = Sheet1

    With ws
        '~~> Remove any autofilter if any
        .AutoFilterMode = False

        '~~> Find last row in Col H
        lRow = .Range("H" & .Rows.Count).End(xlUp).Row

        '~~> Construct your range
        Set rngColH = .Range("H1:H" & lRow)

        '~~> Filter on blanks
        With rngColH
            .AutoFilter Field:=1, Criteria1:="="
            '~~> These are your blank rows (i.e if there are any)
            Set rngToHide = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
        End With

        .AutoFilterMode = False

        '~~> Hide the rows
        If Not rngToHide Is Nothing Then rngToHide.Hidden = True
    End With
End Sub
下面是它的工作原理


使用@Mikku建议的
.SpecialCells(xlcelltypebanks)
也是一种很好的方法:)

看到您的范围字符串超过255个字符,可以告诉我们您是如何构造此范围的。如果是通过代码动态完成的,您最好使用另一种带有变量或类似内容的方法。此外,您还可以使用
r.SpecialCells(xlCellTypeBlanks)
如果单元格为空,则不必使用if条件进行检查。您知道可以使用autofilter在H列中隐藏空白行?比循环更好:)顺便说一句,如果您希望有不同的答案,请随意放置并接受(即,如果您想要):)嗯,首先,注释是“不稳定的”堆栈溢出:它们可以被删除,而且经常被删除,尤其是在较旧的帖子上。此外,该网站的目的是“为每个人”建立一个信息库,采用问答形式,因此问题和答案需要放在正确的位置。这不是一个“免费服务台”,只为您提供支持:-)幸运的是,Siddharth为我们大家提供了一个快速而彻底的答案:-)