2014-10-26 205 views
0

我錄的下方(精簡版)VBA自動篩選 - 帶過濾器的多個陣列

Selection.AutoFilter 
ActiveSheet.Range("$A$4:$FD$373").AutoFilter Field:=3, Criteria1:=Array(_ 
    "house", "flat", _ 
    "hotel"), Operator:=xlFilterValues 

我想添加更多的字符串的(總130)下面的宏,但我不斷收到以下消息

''太多行延續''

該列有大約4-6,000行數據,最初我想刪除具有某些字符串值的行,但該方法需要相當長的時間來處理。

我看着無處不在,不能似乎得到它周圍我的頭:(

任何想法?非常感謝

回答

1

不要的標準存儲在VBA

把130在細胞值ZZ1ZZ130

然後:

Sub marine() 
    Dim ary(0 To 129) As Variant 
    For i = 1 To 130 
     ary(i - 1) = Range("ZZ" & i) 
    Next i 
    ActiveSheet.Range("$A$4:$FD$373").AutoFilter Field:=3, Criteria1:=ary, Operator:=xlFilterValues 
End Sub 
+0

這樣加里的很好的方式! – xyz 2014-10-26 17:01:17

+0

哇謝謝加里,我今天就給這個:) – Elixir 2014-10-26 17:08:22

0

這是一個可能性

做一個標籤(Next在130個細胞到130個字符串)調用它FINDREPLACE,在A列的地方在B柱位置#你的130串

更改「 MYTAB」的標籤與與6000行

更改名稱的.Columns("C:C")到正確的列

運行宏,這將改變所有matchi字符串納克在6000行的130串#

然後使用您的宏在#刪除所有不必要的行

'MAKE A SHEET WITH 1ST COL = FIND 2ND COL = REPLACE 
Sub FindReplace() 
Dim FindValues As Variant 
Dim ReplaceValues As Variant 
Dim wsFR As Excel.Worksheet 
Dim wsTarget As Excel.Worksheet 
Dim lRow As Long 
Dim i As Long 

Sheets("FindReplace").Select 

Set wsFR = ThisWorkbook.Worksheets("FindReplace") 
Set wsTarget = ThisWorkbook.Worksheets("MyTab") 
    lRow = wsFR.Range("A" & wsFR.Rows.Count).End(xlUp).Row 

With wsTarget 
    FindValues = wsFR.Range("A2:A" & lRow).Value 
    ReplaceValues = wsFR.Range("B2:B" & lRow).Value 

    For i = LBound(FindValues) To UBound(FindValues) 
     .Columns("C:C").Replace FindValues(i, 1), ReplaceValues(i, 1), xlWhole, xlByColumns, False 
    Next i 
End With 
End Sub 
+0

使用加里的解決方案做同樣的事情,但方式更冷 – xyz 2014-10-26 17:00:13

+0

感謝蒂姆你的幫助 – Elixir 2014-10-26 17:09:02