filter英文意思是过滤器。顾名思义,这个函数大致功能就是过滤筛选,它是一个针对于数组的函数。有4个参数,分别是:sourcearray(待筛选数雀明组),match(要查找的字符串),include(布尔值,是否包含匹配项),compare(字符查找对比方式)。下面用一个例子说明用法:
Sub test()Dim arr As Variant, brr As Variant, crr As Variant
arr = Array(2, 1, 2, 4, 3, 2)
brr = Filter(arr, 2, False)
crr = Filter(arr, 2, True)
MsgBox "过滤掉匹配项,保留其余项:" & vbCrLf & Join(brr, "_")
MsgBox "过滤掉不匹配项,保留匹配项目:" & vbCrLf & Join(crr, "_")
End Sub
'执行结果分别是斗岁配:
'过滤掉匹配项,保留其余项:
'1_4_3
'过滤掉不匹配项,保留匹配项目:
'2_2_2
从上面的例子brr数组是从arr数组中过滤掉了2,保留其他非匹配项目组成的一个新数组,crr是从arr中去掉了非匹配项,保留了是2的项组成的新数组。所以filter第三个参数是关键,如果是false就不保留匹配向,是true就只保留匹配项,我们一般用的是像brr那种,crr这种现实中没空指什么意义,只是用ubound(crr)-lbound(crr)+1>0 这种来确定某个字符在某个数组中是否存在!
既然用VBA了就不一定要拘泥于用 excel自带的筛选工具了,可以用正则表达式,下面是一段用正则写的用来找到dat表A列 以“PSG - ”或者“IPG - ”开头的数据,然后保存在res表里面,如果你会VBA的话,参考着改一下,不会的话,补充条桐埋件,我帮你改!
Option ExplicitSub s_filter()
Dim dat As Worksheet, res As Worksheet
Dim ln As Long, i As Long, k As Integer
Set dat = Sheets("Sheet1") '要筛选的原始表
Set res = Sheets("Sheet2") '符合条件结果保存表
ln = dat.[a60000].End(3).Row
With CreateObject("vbscript.regexp")
.Global = False
.Pattern = "^(PSG - |IPG - )" '正则春轮卜样式
For i = 1 To ln
If .test(dat.Range("a" &扒穗 i).Value) Then
k = k + 1
dat.Range("a" & i).EntireRow.Copy res.Range("a" & k)
End If
Next i
MsgBox k
End With
Set res = Nothing
Set dat = Nothing
End Sub
----------------------------------------------------------------
一逗洞腊定要用filter写 有颤缓点山滑强硬。。。Sub aaa()
Dim arr, brr
Dim I As Integer
ReDim brr(2 To Cells(Rows.Count, 1).End(xlUp).Row)
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
brr(I) = Cells(I, 1) &Cells(I, 2)
Next
arr = Application.Transpose(Range("A2:A7"))
arr = VBA.Filter(arr, [G1], True)
brr = VBA.Filter(brr, [G1], True)
For I = 2 To 2 + UBound(arr)
Cells(I, 4) = arr(I - 2)
Cells(I, 5) = brr(I - 2)
Cells(I, 5).Replace arr(I - 2), ""
Next
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)