VBA编程,如何用代码进行整列数据查询,

白癜风的影响 http://pf.39.net/bdfyy/qsnbdf/140323/4359087.html

数据查询在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值判断,这里不加,也不影响使用。

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

欢迎


转载请注明:http://www.aierlanlan.com/rzfs/1151.html