要对Excel数据进行筛选,最容易想到的方法自然是Excel本身的数据-筛选功能,但是如果是要在VBA中对数据进行筛选,那么一般的做法是对数据进行循环遍历,把符合条件的数据提取出来,假如数据是这样的:
筛选代码如下:
Sub FilterData()
Dim arr() As Variant
'读取数据源
arr = Range("A1").CurrentRegion.Value
'记录需要筛选的数据需要放到arr中的行号
'共用arr空间
Dim prow As Long
prow = 2
Dim i As Long
For i = 2 To UBound(arr)
'筛选项目包含s的
If VBA.InStr(arr(i, 1), "s") Then
'复制数据
arr(prow, 1) = arr(i, 1)
arr(prow, 2) = arr(i, 2)
prow = prow + 1
End If
Next
'输出
Range("D1").Resize(prow - 1, 2).Value = arr
End Sub
一旦条件变化了,需要变化的代码:
If VBA.InStr(arr(i, 1), "s") Then
让我们看看用ADO是如何做的:
Sub ADOFilterData()
Dim AdoConn As Object
Set AdoConn = VBA.CreateObject("ADODB.Connection")
'打开数据库
AdoConn.Open "Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"
Range("D2").CopyFromRecordset AdoConn.Execute("select * from [Sheet1$A1:B5] where 项目 like '%s%'", , 1)
AdoConn.Close
Set AdoConn = Nothing
End Sub
代码和前面的汇总数据、查找数据一样,仅仅是修改了sql语句,一旦条件发生变化,也仅仅需要修改sql语句就可以,非常的简单方便。