本帖最后由 roych 于 2011-3-13 15:04 編輯
跟Access相比,Excel的查詢(xún)功能盡管比較弱,但還是可以進(jìn)行的,大體有以下幾種方法:
1、自動(dòng)篩選或者高級(jí)篩選法。如果不需要常常更改條件的話(huà),自動(dòng)篩選或者高級(jí)篩選,不失為一種好辦法。畢竟操作的步驟并不多,即便條件再多,一分鐘內(nèi)應(yīng)該也可以完成。
2、公式法:用Index+Small,再加上條件數(shù)組,是可以進(jìn)行一定的查詢(xún)的。格式一般是:{=Index(區(qū)域,small(if(條件,區(qū)域行數(shù),),row(1:1)))},詳細(xì)見(jiàn)附件。
3、導(dǎo)入數(shù)據(jù)法。要領(lǐng)在于導(dǎo)入之后再編輯SQL語(yǔ)句,以達(dá)到查詢(xún)的目的。需要注意的是,數(shù)據(jù)源位置必須正確,詳細(xì)看附件中的“說(shuō)明”工作表。
4、利用內(nèi)置函數(shù),寫(xiě)VBA進(jìn)行查詢(xún)。利用內(nèi)置函數(shù)的Countif、CountA等函數(shù),再加上For語(yǔ)句,逐個(gè)歷遍,以達(dá)到查詢(xún)的目的。
5、利用ADO對(duì)象,編寫(xiě)數(shù)據(jù)集語(yǔ)句執(zhí)行。
好,方法說(shuō)完了,有興趣的可以看看它們之間的優(yōu)缺點(diǎn)了:
前面三個(gè)針對(duì)單次查詢(xún)較為有效,可以省卻編程的繁瑣。
方法1,如果需要對(duì)所篩選的數(shù)據(jù)進(jìn)行求和,則需要先篩選出來(lái),再求和(當(dāng)然,你也可以用狀態(tài)欄來(lái)顯示求和結(jié)果)。
方法2,當(dāng)然也無(wú)法求和的了,借助單元格變量,明顯比自動(dòng)篩選方便。而且,你還可以多加幾個(gè)條件,——把if里的語(yǔ)句改為:(Range1=條件1)*(Range2=條件2)……。而和第一種方法相比,其缺點(diǎn)在于數(shù)據(jù)較多時(shí),對(duì)內(nèi)存影響比較大。
方法3,比起方法2,方法3更加靈活,可以隨時(shí)變更SQL條件而達(dá)到多次查詢(xún)的目的。當(dāng)然,前提是,您必須知道SQL語(yǔ)句的基本語(yǔ)法。
方法4,比起方法3,不用每次都更改SQL語(yǔ)句,而只須在單元格填上條件即可,自然方便多了。不足之處在于條件較多,循環(huán)語(yǔ)句歷遍時(shí),對(duì)內(nèi)存要求比較高,也因此而變得不易于調(diào)試。例子來(lái)源于Polygala1978:
http://m.mzhfr.cn/forum.php?mod=viewthread&tid=96395&page=1#pid586469,在此一并謝過(guò)。
方法5,和方法4相比,同樣可以達(dá)到相同的查詢(xún)目的,而由于沒(méi)有用到循環(huán)語(yǔ)句(或者循環(huán)語(yǔ)句比方法4的要少),從而更加優(yōu)化了代碼的執(zhí)行效率。在執(zhí)行查詢(xún)前,應(yīng)先調(diào)試SQL語(yǔ)句是否有誤,還要注意字段類(lèi)型等,詳見(jiàn)附件的代碼注釋。
希望大家不要覺(jué)得Roy過(guò)于羅嗦噢。不過(guò),Excel查詢(xún)又豈是三言?xún)烧Z(yǔ)可以說(shuō)得很清楚的呢?如有不清楚之處,請(qǐng)大家隨時(shí)反饋。
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng) 回復(fù)
更新后的附件,有了模糊查詢(xún)的功能。相信大家更加喜歡吧。O(∩_∩)O~~
在VBA語(yǔ)言里,Access和Excel的是不同的,前者為星號(hào)(*),后者為百分號(hào)(%),這很是困惑了我一陣子。在這里順便提一下,以便新手少走一些彎路。
|