2013-11-20 71 views
0

我的數據是像如下:Excel VBA中自動篩選陣列誤差

名稱值標誌

愛麗絲5回購

鮑勃8跳轉

丹9

愛麗絲1

Alice 6 Jump

丹0回購

鮑勃8跳轉

如果有任何名稱,任何記錄,在標誌字段中是否有「回購」,那麼我想保留與該名稱相關聯的所有記錄。 Alice有3條記錄,其中一條是BUYBACK,所以我想保留ALice的所有記錄。丹在兩人中有一人回購,所以我想保留丹的兩條記錄,而鮑勃的兩條記錄都被刪除。

當我嘗試執行下面的操作時,我的AutoFilter出現錯誤。錯誤說「需要對象」。我似乎無法弄清楚什麼是錯的。

n = 1 

    Dim BBK_Array() As Variant 

    For j = 1 To FinalRow 

     If Cells(j, 3).Value = "BUYBACK" Then 
      If n = 1 Then 
       ReDim Preserve BBK_Array(1 To n) 
       BBK_Array(n) = Cells(j, 1).Value 
       n = n + 1 

      ElseIf BBK_Array(n - 1) <> Cells(j, 1).Value Then 
        ReDim Preserve BBK_Array(1 To n) 
        BBK_Array(n) = Cells(j, 1).Value 
        n = n + 1 

      End If 


     End If 
    Next j 




    ActiveWorksheet.UsedRange.AutoFilter Field:=1, Criteria1:=BBK_Array(), Operator:=xlFilterValues 

編輯:

當我這樣做,它的工作。我不知道爲什麼:

 ActiveWorkbook.Activesheet.UsedRange.AutoFilter Field:=1, Criteria1:=BBK_Array(), Operator:=xlFilterValues 
+0

** FinalRow **在哪裏成立? –

+0

@加里的學生..早在代碼中。當我做了Activeworkbook.activesheet然後它工作。 – Amatya

+0

好吧,我猜我的牀單不是主動的或什麼的。我應該刪除這個問題嗎?你能告訴我爲什麼activeworkbook.activesheet工作,但只是activesheek沒有?我在保存數據的同一個文件中寫了宏。謝謝 – Amatya

回答

1

你需要VBA嗎?一個簡單的Excel公式可以解決你的問題。

比方說,你的數據看起來像這樣

enter image description here

所有你需要做的就是創建一個4列,並輸入是公式單元格D2

=SUMPRODUCT((A:A=A2)*(C:C="BuyBack"))

簡單的自動填寫公式到最後一行。現在在0上過濾col D並刪除它。

enter image description here

看到這個。

enter image description here

完成後,刪除山坳D

如果你還想要一個VBA解決方案,然後錄製宏,並按照上面的步驟,只是修改,以滿足您的需求。這將是9行代碼(包括聲明)

下面是一個例子

Sub Sample() 
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") 
    Dim lRow As Long: lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row 

    ws.Range("D2:D" & lRow).Formula = "=SUMPRODUCT((A:A=A2)*(C:C=""BuyBack""))" 
    ws.Range("D2:D" & lRow).Value = ws.Range("D2:D" & lRow).Value 

    ws.AutoFilterMode = False 
    ws.Range("D2:D" & lRow).AutoFilter Field:=1, Criteria1:="=0" 
    ws.Range("D2:D" & lRow).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    ws.AutoFilterMode = False 

    ws.Columns(4).Delete 
End Sub 

而且這是在運行宏之後,我們得到的輸出。

enter image description here

+0

這是我正在做的一系列非常長的數據處理中的一小部分。我的老闆希望我創建一個按鈕,使他能夠上傳他的月度文件並通過一次點擊就可以生成各種各樣的東西。我是全新的excel vba,當我與東西鬥爭時,您會看到項目的每一步。 :) – Amatya

+0

它將大約10-15行代碼(減去聲明)。 –

+0

雖然整潔的方法!謝謝!! – Amatya