【VBA案例008】多条件查询
554 字
3 分钟
【VBA案例008】多条件查询
大家好!今天分享的案例是多条件查询。
这个查询在进销存或者库存管理中特别常用,如果你准备或者正在做一个自己的管理查询工具,这个方法一定要会。先来看一下数据。
比如说,现在有一份产品信息表。

我们要做的是在查询页面,输入参数后,查询出所有满足条件的内容。其中参数可以不填,不填就表示要查询所有内容。

本期将使用2个方法来实现效果,以下是VBA代码,详细视频解析在文末。
方法一:
Sub 方法一()
Dim i, j, k Dim ar, br()
With Sheet2 ar = .Range("a1:f" & .[a65536].End(3).Row) End With
ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))
Dim customer, product, startDate As Date, endDate As Date With Sheet1 customer = IIf(.[b2] = "", "", "," & .[b2] & ",") product = IIf(.[d2] = "", "", "," & .[d2] & ",") startDate = IIf(.[f2] = "", #1/1/1900#, .[f2]) endDate = IIf(.[h2] = "", #1/1/2400#, .[h2]) End With
For i = 2 To UBound(ar) If ar(i, 1) >= startDate And ar(i, 1) <= endDate Then If InStr("," & ar(i, 2) & ",", customer) > 0 Then If InStr("," & ar(i, 3) & ",", product) > 0 Then k = k + 1 For j = 1 To UBound(br, 2) br(k, j) = ar(i, j) Next j End If End If End If Next i
Sheet1.[a5:f65536].ClearContents If k > 0 Then Sheet1.[a5].Resize(k, UBound(br, 2)) = br End If
End Sub方法二:
Sub SQL查询() '定义变量 Dim cnn, rst, SQL$ Dim i, j, k Set cnn = CreateObject("adodb.connection") '创建数据库连接 Set rst = CreateObject("adodb.recordset") '创建一个数据集保存数据
'设置数据库连接 If Val(Application.Version) < 12 Then cnn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties='Excel 8.0;HDR=yes';Data Source=" & ThisWorkbook.FullName Else cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';Data Source=" & ThisWorkbook.FullName End If
Dim customer, product, startDate As Date, endDate As Date With Sheet1 customer = IIf(.[b2] = "", "", "," & .[b2] & ",") product = IIf(.[d2] = "", "", "," & .[d2] & ",") startDate = IIf(.[f2] = "", #1/1/1900#, .[f2]) endDate = IIf(.[h2] = "", #1/1/2400#, .[h2]) End With
'设置SQL语句 SQL = "select * from [产品信息$A1:F22] where 日期>=#" & startDate & "# and 日期<=#" & endDate & "# and instr(','&客户&',','" & customer & "')>0 and instr(','&产品&',','" & product & "')>0" '
'SQL结果处理 Set rst = cnn.Execute(SQL)
Sheet1.[a5:f65536].ClearContents Sheet1.Range("a5").CopyFromRecordset rst' For i = 1 To rst.Fields.Count' Cells(1, i + 5) = rst.Fields(i - 1).Name' Next
rst.Close cnn.Close '关闭数据库连接 Set rst = Nothing Set cnn = Nothing '将cnn从内存中删除End Sub支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
【VBA案例008】多条件查询
https://fanrich.eu.org/posts/程技/vba/vba案列/vba案例008多条件查询/相关文章智能推荐
1
【VBA案例002】一对多查询
程技2023-10-23
2
【VBA案例007】多条件汇总
程技2023-10-23
3
【VBA案例003】模糊查询
程技2023-10-23
4
【VBA案例001】实现VLOOKUP功能
程技2023-10-23
5
【VBA案例006】数据去重
程技2023-10-23
随机文章随机推荐
樊笼










