数据查询在Excel工作表中应用十分普遍,工作表应用的一个重点,就是对数据进行有序整理,而查询是其整理阶段的一个重要方面。

如下图所示,通过某一列数据内容可对数据表进行查询并显示。

以合同信息为例,来进行任何一列数据项目的查询。

其重点就是搜索条件设置,如完全条件匹配,和模糊匹配。

完全匹配就是对条件进行严格比较,进行搜索,模糊匹配就是被搜索的数据里包含条件内容即可。

严格条件匹配代码:

Public Sub SelectStr(xCap As String, icx As String) On Error Resume Next Dim xArr, xi As Long, ir As Long, ic As Long, ri As Integer Dim s As Worksheet, a As Worksheet, R As Range, xR As Range Set a = ActiveSheet Set s = ThisWorkbook.Worksheets("合同台账") Set R = a.Range("C3:R3") xArr = s.Range("B10").CurrentRegion ir = UBound(xArr, 1) ic = UBound(xArr, 2) For xi = LBound(xArr, 1) To UBound(xArr, 1) If xArr(xi, icx) = xCap Then R.Insert Shift:=xlDown Set R = a.Range("C3:R3") For ri = 1 To R.Count R.Item(ri).Value = xArr(xi, ri) Next ri End If Next xi Set s = Nothing End Sub

模糊匹配搜索代码:

Public Sub SelectStr(xCap As String, icx As String) On Error Resume Next Dim xArr, xi As Long, ir As Long, ic As Long, ri As Integer Dim s As Worksheet, a As Worksheet, R As Range, xR As Range Set a = ActiveSheet Set s = ThisWorkbook.Worksheets("合同台账") Set R = a.Range("C3:R3") xArr = s.Range("B10").CurrentRegion ir = UBound(xArr, 1) ic = UBound(xArr, 2) For xi = LBound(xArr, 1) To UBound(xArr, 1) If VBA.InStr(1, xArr(xi, icx), xCap, vbTextCompare) <> 0 Then R.Insert Shift:=xlDown Set R = a.Range("C3:R3") For ri = 1 To R.Count R.Item(ri).Value = xArr(xi, ri) Next ri End If Next xi Set s = Nothing End Sub

两段代码整体相同,不同之处在于条件设置。

一个是"等于"比较,一个是InStr函数返回值判定。

InStr(Star,String1,String2)函数返回一个数值或Null,如果在一个字符串找到了另一个,那么就返回字符串所在位置。

String1是要搜索的字符串,String2就是要找的字符串,也就是说如果在String1中找到了String2那么就返回位置。

返回位置不是0,或者Null,就说明找到了。

严格来说上述代码还应该再加一个Null值判断,这里不加,也不影响使用。

查询是个很复杂的逻辑过程,可以用多种方法实现,最好在应用的时候使用数组,效果不是一般的好。

欢迎关注、收藏

---END---