【发布时间】:2018-08-23 14:44:44
【问题描述】:
我是 vba 的新手,现在使用一个宏来过滤第一个确切字母的列(例如,我有一个列 N -“城市”,因此我必须拥有所有条目,例如以“温哥华”、“温哥华。BC”、“温哥华加拿大”开头——所以我想按第一个字母对这一列进行排序——VANCOU——以确保我不会错过任何信息。
下面的代码对于 3 个值根本不起作用——可能我选择了错误的方式。请你指教——在这种情况下哪个函数或运算符可以工作?我找到的所有 - 为 2 个值工作(在这种情况下,我可以在列表“开始于”时使用)。我有 5-6 个值,它们可能会有所不同(我不知道下次我会使用哪种格式的城市名称)。
提前致谢!
Dim rng01 As Range
Set rng01 = [A1:Z5048]
rng01.Parent.AutoFilterMode = False
rng01.Columns(14).AutoFilter Field:=1, Criteria1:=Array("Vancou*", "Brampt*", "Halifa*"), Operator:= _
xlFilterValues
更新: 这是一个改编的代码,它不起作用
Option Explicit
Sub AutoFilterWorkaround()
Dim sht As Worksheet
Dim filterarr As Variant, tofindarr As Variant
Dim lastrow As Long, i As Long, j As Long, k As Long
Set sht = ThisWorkbook.Worksheets("Sheet1")
lastrow = sht.Cells(sht.Rows.Count, "N").End(xlUp).Row
'List the parts of the words you need to find here
tofindarr = Array("Vancou", "Brampt", "Halifa")
ReDim filterarr(0 To 0)
j = 0
For k = 0 To UBound(tofindarr)
For i = 2 To lastrow
If InStr(sht.Cells(i, 14).Value, tofindarr(k)) > 0 Then
filterarr(j) = sht.Cells(i, 14).Value
j = j + 1
ReDim Preserve filterarr(0 To j)
End If
Next i
Next k
'Filter on array
sht.Range("$N$1:$N$" & lastrow).AutoFilter Field:=14, Criteria1:=Array(filterarr), Operator:=xlFilterValues
End Sub
【问题讨论】:
-
就像你说的,
AutoFilter仅限于数组中的两个通配符项目 - 我相信有一个解决方法,但我无法挖掘它自从上次有人问这个问题以来。 -
感谢您的回复!我已经搜索了几天的解决方案 - 根本没有结果 - 一切都适用于 2 个值或数字......
-
在下面查看我的答案。
标签: vba excel excel-formula