2013-04-15 178 views
1

我想在VBA中應用三個不同的標準在同一個領域的自動過濾器。一旦我應用了過濾器,我想找到所有那些空白的單元格,任何人都可以提出建議?AutoFilter找到空白單元格

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 

enter image description here

我落得這樣做這是一個嵌套的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 
+1

什麼是'I'在'細胞(I,J)'...目前它等於零,這會導致錯誤... –

+0

I,行號是 J,列 它們都設置爲長 – user1643333

+0

關於NumberOfRows計算多少行?使用SpecialCells時,大約有8k個不連續的單元存在限制。如果不止於此,您可能需要使用循環。另外,您是否想要檢查AA列是否爲空白單元格或列W到AA中的任何單元格? – sous2817

回答

1

這似乎讓我靠近(也假設你有一個名爲「評估」工作表):

Sub ApplyAutoFiler() 
    Dim ws As Worksheet 

    Set ws = Sheets("Assessments") 

With ws 
     .AutoFilterMode = False 
     .Range("A:AZ").AutoFilter Field:=23, Criteria1:=Array("a", "b", "c"), Operator:=xlFilterValues 
     .Cells.SpecialCells(xlCellTypeBlanks).Interior.Color = 65535 
     .AutoFilterMode = False 
End With 
End Sub 
+0

謝謝,這似乎在做某事,但每次我嘗試運行它時,電子表格都沒有迴應 – user1643333

+0

您可以擴展「沒有響應」的含義嗎?它鎖定了,還是什麼都沒有發生?如果我必須猜測,沒有看到你的工作表,這部分應該清理「範圍(」A:AZ「)。」只是您實際想要過濾的行。 – sous2817

+0

它鎖定了,我必須去任務管理器關閉它。 我改變了我只需要的行的範圍和過濾器工作,但後來再次鎖定 – user1643333

0

您不需要VBA。您可以使用條件格式。看到這個例子

在CF規則,設置此公式

=AND($AA5="",OR($W5="a",$W5="b",$W5="c"))

截圖

enter image description here

如果您仍想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 
+0

我試圖找到的空白處在不同的列中。列W永遠不會是空白的,它可能是列AA。 – user1643333

+0

如果您向我展示一個示例,我將很樂意修改上述代碼? –

+0

我已經添加了數據如何截圖,這是否更清晰? – user1643333

0

我今天剛剛發現的關於使用VBA代碼過濾空白的東西。一定要包括這在所有的代碼,你需要有空白單元格:

「用空格獲取行

 WorkRange.AutoFilter Field:=1, Criteria1:="=", Operator:=xlOr, Criteria2:="=" & "" 

」隱藏行與空白......與「<>」爲運營商相同的想法

 WorkRange.AutoFilter Field:=1, Criteria1:="<>", Operator:=xlOr, Criteria2:="<>" & "" 

第一準則得到真空細胞,並用隱藏/不可打印的字符的那些細胞,所述第二準則都獲得包含空字符串的那些細胞。 Excel用戶界面可以很好地處理這個問題,但VBA代碼需要這兩個標準。

這無證警告只是我花了幾個小時的調試,更不用提我的經理幾個選擇的話對「我以爲我們這些列中刪除空白......」

只是想我要分享,希望能爲您節省一些頭痛。

0

我知道這個腳步已經很長了。但只是想分享。爲了篩選出空白單元格,你可以使用自動篩選使用下列標準:

Worksheets("sheet name").Range("A1").autoFilter Field:=18, Criteria1:=(Blanks) 

「域」指的是列編號。至於 「標準1」,它可以是

Criteria1:=(Blanks) 

Criteria1:="=" 

Criteria1:="" 
相關問題