2017-08-11 58 views
0

請幫助您獲取用戶提供的篩選Excel中數據的條件,然後在宏中使用該條件追加額外的篩選條件。Excel Macro捕獲選定的篩選條件

我已經做到下面,直到現在。如何構建動態標準,如果存在多個條件,我們是否有任何功能來捕獲標準,然後追加?

With Rng.Parent.AutoFilter 

    If Intersect(Rng, .Range) Is Nothing Then GoTo Finish 

    With .Filters(Rng.Column - .Range.Column + 1) 
     If Not .On Then GoTo Finish 
     Filter = .Criteria1 
     Filter = Filter & " OR " & Cells(4, 10) 
     Select Case .Operator 
      Case xlAnd 
       Filter = Filter & " AND " & .Criteria2 
      Case xlOr 
       Filter = Filter & " OR " & .Criteria2 
     End Select 
    End With 
+0

https://stackoverflow.com/questions/9489126/in-excel-vba-how-do-i-save-restore-a-user-defined-filter –

回答

1

下面是一些簡單的代碼,讓你開始對一些樣本數據使用.AutoFilter用VBA。請注意,您可以根據您的要求使用多個條件來過濾數據,並且您可以根據需要動態更改過濾條件。 GIF動畫演示顯示了代碼。 r.select聲明只是爲了幫助您理解,一旦理解,應予以刪除。過濾數據後,選擇一些過濾的數據並將其複製到另一張紙上。當然,你會根據需要進行修改。

enter image description here

Option Explicit 
Sub test() 
Dim sh1 As Worksheet, sh2 As Worksheet, r As Range, filteredRange As Range 
Dim chosenName As String 
Const idCol = 1, nameCol = 2, cityCol = 4, chosenCity = "Denver" 

chosenName = InputBox("What name to filter by?") 
Set sh1 = Worksheets("Sheet1") 
Set sh2 = Worksheets("Sheet2") 
Set r = sh1.Range("A1") 
sh1.Activate 
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 

    r.AutoFilter field:=nameCol, Criteria1:="=" & chosenName 
    r.AutoFilter field:=cityCol, Criteria1:="=" & chosenCity 
    Set r = sh1.AutoFilter.Range.Columns(idCol) 
    Set r = r.Offset(1, 0).Resize(r.Rows.Count - 1, 1) 
    Set r = r.SpecialCells(xlVisible) 
r.Select 
r.Copy 
sh2.Activate 
sh2.Range("A1").Select 
sh2.Paste 
End Sub 
+0

謝謝託尼。我有一點不同的要求。 首先,使用的過濾器將是正常的,如Excel - >數據選項卡 - >過濾器。不是用戶輸入。 用戶將在excel的彈出過濾器下選擇不同的複選框,因此可能有多個選項,比如5個複選框。 我如何獲取這些值並追加包含空白的標準? – chint

+0

這裏的評論比你原來的問題要清楚得多。 –

+0

如果您在描述過程中定義過濾器時使用宏記錄器,它將添加類似於我提供的代碼。因此,您可以學習自己構建過濾器,而不是使用代碼來確定過濾器。例如,由於您想引入空格,因此我將第11行的「Smith」替換爲空白,然後生成代碼以篩選「Smith」和空白。然後我將生成的代碼調整到我的代碼中定義的變量,並提出了包含空白所需的代碼,即:r.AutoFilter Field:= nameCol,Criteria1:=「=」&chosenName,Operator:= xlOr, Criteria2:= 「=」 –