VBA AutoFilter - 使用多个阵列进行过滤

时间:2014-10-26 15:36:13

标签: excel vba excel-vba

我在下面录制了以下宏(短版)

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

我想添加更多字符串(总共130个),但我不断收到以下消息

''太多续行''

该列有大约4-6,000行数据,最初我想删除具有某些字符串值的行,但这种方法需要很长时间才能处理。

我到处寻找,似乎无法理解它:(

有什么想法吗?非常感谢

2 个答案:

答案 0 :(得分:1)

请勿将标准存储在 VBA

将130个值放在 ZZ1 ZZ130

的单元格中

然后:

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

答案 1 :(得分:0)

这是一种可能性

将一个标签称为FindReplace,在A列中将130个字符串放在B列的位置#(在130个字符串旁边的130个单元格中)

改变" MyTab"到带有6000行的选项卡的名称

.Columns("C:C")更改为正确的列

运行宏,这会将匹配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