2014-10-26 72 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