Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 自动筛选以查找空白单元格_Excel_Vba - Fatal编程技术网

Excel 自动筛选以查找空白单元格

Excel 自动筛选以查找空白单元格,excel,vba,Excel,Vba,我试图在VBA中为同一领域中的三个不同标准应用自动筛选。一旦我应用了过滤器,我想找到所有空白的单元格,有人可以建议吗 Sub ApplyAutoFiler() Dim ws As Worksheet Dim I, j, NumberOfErrors As Long IsErrors = False Set ws = Sheets("Assessments") NumberOfErrors = 0 Dim Z As Range S

我试图在VBA中为同一领域中的三个不同标准应用自动筛选。一旦我应用了过滤器,我想找到所有空白的单元格,有人可以建议吗

    Sub ApplyAutoFiler()
    Dim ws As Worksheet
    Dim I, j, NumberOfErrors As Long
    IsErrors = False

    Set ws = Sheets("Assessments")

    NumberOfErrors = 0
    Dim Z As Range
    Set Z = Cells(4, 3).EntireColumn.Find("*", SearchDirection:=xlPrevious)
    If Not Z Is Nothing Then
        NumberOfRows = Z.Row
    End If

    For I = 4 To NumberOfRows

   With ws
   .AutoFilterMode = False
  .Range("W4:AA4").AutoFilter Field:=1, Criteria1:=Array("A", "B", "C"), Operator:=xlFilterValues
  .Cells.SpecialCells(xlCellTypeBlanks).Interior.Color = 65535
  .AutoFilterMode = False

   End With

   Next I


   End Sub

最后我把它作为一个嵌套的if语句来完成

If Range("W" & i).Value = "A" Or Range("W" & i).Value = "B" Or Range("W" & i).Value = "C" Then
     If Range("AD" & i).Value = "" Then
        Range("AD" & CStr(i)).Interior.ColorIndex = 3
        NumberOfErrors = NumberOfErrors + 1
     End If
  End If

这似乎让我接近了(它还假设您有一个名为“评估”的工作表):


这不需要VBA。您可以为此使用条件格式。看这个例子

在CF规则中,设置此公式

=和($AA5=”,或($W5=“a”、$W5=“b”、$W5=“c”)

屏幕截图

如果仍然需要VBA,请查看此

Sub Sample()
    Dim blnkRange As Range, rng As Range, aCell As Range
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Assessments")

    With ws
        '~~> Sample range for testing purpose
        Set rng = .Range("W4:AA11")

        .AutoFilterMode = False

        With rng
            '~~> Filter on "a","b","c"
            .AutoFilter Field:=1, Criteria1:=Array("a", "b", "c"), Operator:=xlFilterValues
            '~~> Then filter on blanks on Col AA
            .AutoFilter Field:=5, Criteria1:="="

            '~~> Using offset. Assuming that Row 4 has headers
            Set blnkRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).Cells
        End With

        .AutoFilterMode = False
    End With

    '~~> This will give you the blank cells in Col AA
    If Not blnkRange Is Nothing Then
        For Each aCell In blnkRange
            '~~> Color the blank cells red in Col AA
            If aCell.Column = 27 Then aCell.Interior.ColorIndex = 3
        Next
    End If
End Sub

今天我发现了一些关于使用VBA代码过滤空白的东西。确保在需要空白单元格的所有代码中都包含此项:

“获取带空格的行
WorkRange.AutoFilter字段:=1,准则1:=“=”,运算符:=xlOr,准则2:=”=“=”&”
'隐藏带有空格的行。。。运算符“”的想法相同
WorkRange.AutoFilter字段:=1,准则1:=“”,运算符:=xlOr,准则2:=“”&“
第一个条件获取真正的空白单元格和具有隐藏/不可打印字符的单元格,第二个条件获取包含空字符串的单元格。Excel用户界面可以很好地处理这个问题,但VBA代码需要这两个条件

这个未记录的警告只花了我几个小时的调试时间,更不用说我的经理说了几句“我以为我们正在删除这些列中的空白…”


我只是想和大家分享一下,希望能帮大家省去一些麻烦。

我知道这段路走了很久。但我只是想分享。要筛选出空白单元格,可以使用以下条件的自动筛选:

Worksheets("sheet name").Range("A1").autoFilter Field:=18, Criteria1:=(Blanks)
“字段”指列号。至于“准则1”,它可以是

Criteria1:=(Blanks)


你的
单元格(I,J)
中的
I
是什么。。。此时它等于零,这会导致一个错误…I,是行号J,是它们都设置为长的列关于NumberOfRows计算的行数是多少?当使用特殊单元时,有大约8k个非连续单元的限制。如果不止这些,您可能需要使用循环。另外,您是否只想检查AA列中的空白单元格或W列到AA列中的任何单元格?此时它只检查580,但这可以更改为至少1000+。我正在筛选W栏,我只想检查AA栏中的空白。让我再回到你们这里。谢谢你的截图。让它更清楚。谢谢,这似乎在做一些事情,但每次我尝试运行它时,电子表格都没有响应。你能详细说明什么是“没有响应”吗?它锁起来了,还是什么都没发生?如果我不得不猜测,在没有看到您的工作表的情况下,这部分应该清理“Range”(“A:AZ”)。这只是您实际需要过滤的行。它会锁定,我必须转到任务管理器关闭它。我只更改了我需要的行的范围,并且过滤器正在工作,但随后再次锁定。听起来你还有其他事情要做(比如很多计算)。您能否提供工作表中可能导致问题的其他情况?也许在一个新的工作表上尝试我的代码只是为了确保它不是导致问题的代码。我确实在一个新的工作表上尝试了它,我可以看到过滤器工作,但之后它锁定了。我还想包括的是,我正在寻找的空白在不同的列中,对不起,我是vba新手。我正在尝试查找的空白在不同的列中。W列永远不会是空的,可能是AA列。如果你给我举个例子,我很乐意修改上面的代码。我已经添加了一个屏幕截图,说明了数据可能是怎样的,这会让它更清晰吗?谢谢你的帮助,不幸的是,我在这一行遇到了运行时错误“5”:Set blankRange=.Offset(1,0)。SpecialCells(xlCellTypeBlanks).Cells和我似乎无法解决问题您为
set rng=.Range(“W4:AA11”)
设置了什么?成功避免了头痛!
Criteria1:=(Blanks)
Criteria1:="="
Criteria1:=""