2015-04-23 56 views
1

我有一個關於在Excel中過濾行的問題。在Excel中按數值過濾

我有一張大桌子,有超過10 000行。每一行都有獨特的ID。 我複製了我的表格,並對某些行進行了修改並突出顯示了它們。

我需要根據唯一的ID值的數組選擇行。 (ID字段如下所示:1, 2, 3, 4, 5,.., 10500)構成第一個Excel表的未修改副本。

回答

0

排序我將使用以下示例數據進行演示。

Sample Tables for Filtering

的主要爲藍色表A1:D16是一個命名myTable的的ListObject。 F3:I13中的主要綠色表是名爲MyTable_Copy的ListObject。

要過濾基於在的ID列中找到myTable_CopyID的所述myTable的的ListObject,我們需要構造ID號作爲一個字符串數組。可以使用一個函數。請記住,過濾器需要一個看起來像整數的字符串數組,而不是真正的整數。如果你有像前導零這樣的特殊數字格式,該功能將不得不改變以適應這種情況。

點擊Alt鍵 + F11和VBE打開時,立即使用下拉菜單插入►模塊(Alt鍵 + 中號)。將以下內容粘貼到名爲Book1 - Module1(Code)的新模塊代碼表中。

Function gather_IDs(sTBL As String, sCOL As String) 
    Dim aIDs() As String, i As Long, id As Range 
    For Each id In Range(sTBL & "[" & sCOL & "]") 
     ReDim Preserve aIDs(0 To i) 
     aIDs(i) = CStr(id.Value2) 
     i = i + 1 
    Next id 
    gather_IDs = aIDs 
End Function 

現在我們需要一個子調用該函數並根據返回的數組上過濾myTable的。在同一個模塊表中,粘貼以下內容。

Sub main() 
    Dim vIDs As Variant 

    vIDs = gather_IDs("myTable_Copy", "ID") 

    With ActiveSheet 
     .ListObjects("myTable").Range.AutoFilter Field:=1, Criteria1:=(vIDs), _ 
      Operator:=xlFilterValues 
    End With 

End Sub 

請注意,傳入Criteria1參數的變量數組包含在括號中。 括號非常重要。如果沒有它們,則.AutoFilter命令不會將變量數組識別爲數組,而只會將數組中的第一個值用作過濾條件。

點擊Alt鍵 + Q返回到您的工作表,然後Alt鍵 + F8打開對話和運行主要宏。您應該收到類似於以下的結果。

Tables Filtered by Array

+0

非常感謝,這解決了它! :) – Litwos

0

如果我理解正確,您希望能夠輕鬆查看/訪問修改過的行嗎?

您可以添加一個單獨的列,在修改後的行上添加一個值,然後按該列對整個表進行排序。您可以在表格頂部或底部找到修改的條目。

只要您不再需要這些信息,請清除此新列並根據ID使用表格(如有必要)。變體:留下此列並增加編輯時插入的值,以便您可以按

+0

我需要使用值的數組從我的文檔的副本選擇行。我會修改這個問題。 – Litwos