数据查询在Excel工作表中应用十分普遍,工作表应用的一个重点,就是对数据进行有序整理,而查询是其整理阶段的一个重要方面。
如下图所示,通过某一列数据内容可对数据表进行查询并显示。
以合同信息为例,来进行任何一列数据项目的查询。
其重点就是搜索条件设置,如完全条件匹配,和模糊匹配。
完全匹配就是对条件进行严格比较,进行搜索,模糊匹配就是被搜索的数据里包含条件内容即可。
严格条件匹配代码:
PublicSubSelectStr(xCapAsString,icxAsString)
OnErrorResumeNext
DimxArr,xiAsLong,irAsLong,icAsLong,riAsInteger
DimsAsWorksheet,aAsWorksheet,RAsRange,xRAsRange
Seta=ActiveSheet
Sets=ThisWorkbook.Worksheets("合同台账")
SetR=a.Range("C3:R3")
xArr=s.Range("B10").CurrentRegion
ir=UBound(xArr,1)
ic=UBound(xArr,2)
Forxi=LBound(xArr,1)ToUBound(xArr,1)
IfxArr(xi,icx)=xCapThen
R.InsertShift:=xlDown
SetR=a.Range("C3:R3")
Forri=1ToR.Count
R.Item(ri).Value=xArr(xi,ri)
Nextri
EndIf
Nextxi
Sets=Nothing
EndSub
模糊匹配搜索代码:
PublicSubSelectStr(xCapAsString,icxAsString)
OnErrorResumeNext
DimxArr,xiAsLong,irAsLong,icAsLong,riAsInteger
DimsAsWorksheet,aAsWorksheet,RAsRange,xRAsRange
Seta=ActiveSheet
Sets=ThisWorkbook.Worksheets("合同台账")
SetR=a.Range("C3:R3")
xArr=s.Range("B10").CurrentRegion
ir=UBound(xArr,1)
ic=UBound(xArr,2)
Forxi=LBound(xArr,1)ToUBound(xArr,1)
IfVBA.InStr(1,xArr(xi,icx),xCap,vbTextCompare)0Then
R.InsertShift:=xlDown
SetR=a.Range("C3:R3")
Forri=1ToR.Count
R.Item(ri).Value=xArr(xi,ri)
Nextri
EndIf
Nextxi
Sets=Nothing
EndSub
两段代码整体相同,不同之处在于条件设置。
一个是"等于"比较,一个是InStr函数返回值判定。
InStr(Star,String1,String2)函数返回一个数值或Null,如果在一个字符串找到了另一个,那么就返回字符串所在位置。
String1是要搜索的字符串,String2就是要找的字符串,也就是说如果在String1中找到了String2那么就返回位置。
返回位置不是0,或者Null,就说明找到了。
严格来说上述代码还应该再加一个Null值判断,这里不加,也不影响使用。
查询是个很复杂的逻辑过程,可以用多种方法实现,最好在应用的时候使用数组,效果不是一般的好。
欢迎