如何快速學(xué)習(xí)Excel VBA?
網(wǎng)友解答: 目前,VBA大多應(yīng)用在EXCEL中,但VBA不僅僅局限在EXCEL中,整個(gè)Microsoft Office套件都可以使用VBA進(jìn)行功能的關(guān)聯(lián)與擴(kuò)展。我認(rèn)為十分有必要學(xué)習(xí)VBA
目前,VBA大多應(yīng)用在EXCEL中,但VBA不僅僅局限在EXCEL中,整個(gè)Microsoft Office套件都可以使用VBA進(jìn)行功能的關(guān)聯(lián)與擴(kuò)展。
我認(rèn)為十分有必要學(xué)習(xí)VBA。
VBA并不復(fù)雜,重要的是積累。以我的經(jīng)驗(yàn)剛開始學(xué)習(xí)VBA主要從兩個(gè)方面入手:
Visual Basic語法
Excel中的對(duì)像模型
然后,就是在使用VBA的過程中不斷總結(jié),多看看別人是如何處理相同的問題。
想要快速學(xué)習(xí)VBA,推薦先學(xué)習(xí)Visual Basic基本語法,同時(shí)掌握EXCEL中的“錄制宏”。試著使用“錄制宏”將你的操作錄下來,然后再分析錄制的代碼。 “錄制宏”很實(shí)用,對(duì)學(xué)習(xí)VBA也有很大的幫助。
網(wǎng)友解答:新手學(xué)習(xí)Excel VBA的幾點(diǎn)建議,你不妨過來
1:調(diào)試
經(jīng)常看到新手學(xué)習(xí)了很長時(shí)間的VBA之后仍然不會(huì)使用調(diào)試功能,一遇到問題馬上就請(qǐng)教他人,這樣不利于自身的成長。調(diào)試非常重要,是學(xué)習(xí)代碼本身
不可或卻的一部分。是診斷,梳理代碼邏輯的過程,可以避免邏輯錯(cuò)誤的重復(fù)性發(fā)生。善用調(diào)試新手很多的問題都可以得到解決,即可擺脫對(duì)他人的依賴性,自身又得到長足的進(jìn)步,一舉兩得。
三個(gè)窗口,三個(gè)功能鍵:
地方窗口,立即窗口,觀察窗口,F1(幫助),F2(屬性方法),F8(分步執(zhí)行)
途中診斷:
斷點(diǎn),stop等等。
2:分拆
(1)語句分拆
長而難懂的句子分拆成基本單元,利用調(diào)試功能一個(gè)個(gè)解決,很容易就理解了它的含義。
如:intRow=Range("A"&Rows.Count).end(xlup).row
立即窗口:?Rows.Count
Range("A"&Rows.Count).Select
Range("A"&Rows.Count).End(xlup).Select
?Range("A"&Rows.Count).End(xlup).row
用眼睛都可以看到每一步Excel選中的哪個(gè)單元格,那么自然就不難理解了。這個(gè)小范例同時(shí)揭示了學(xué)習(xí)程序過程中一個(gè)非常重要的方面:動(dòng)手嘗試。
(2)子程序分拆
把一個(gè)冗長的程序按照功能拆分成一個(gè)個(gè)相對(duì)獨(dú)立的子程序來調(diào)用,使得程序具有一定程度的組織性,結(jié)構(gòu)性,規(guī)整性大大提高了代碼的可維護(hù)性,擴(kuò)展性,重用性。這是貫穿程序語言發(fā)展的一條主線,因?yàn)樗苯又赶蛄顺绦蜷_發(fā)的終極目的之一:開發(fā)效率。
3:耐心
學(xué)習(xí)目的明確≠急于求成。無論學(xué)習(xí)目的如何直接和明確,學(xué)習(xí)的過程仍然不是一蹴而就的,"捷徑"只能是建立在扎實(shí)的階梯式基礎(chǔ)上。有些新手基本代碼還沒寫利落就開始用界面寫"系統(tǒng)",甚至還沒學(xué)會(huì)調(diào)試,結(jié)果是步履維艱,一步一問,三步一錯(cuò),無以為繼。還有的朋友學(xué)習(xí)VBA是為了研究彩票,還沒學(xué)習(xí)一星期就開始寫各種計(jì)算方法,自然處處遇"難",大挫學(xué)習(xí)興趣,隨之放棄。抱著明確的目的學(xué)習(xí)是好事,不管目的是否"明智"(這是另外一個(gè)話題),但明確的目的不等于"急功近利"。學(xué)習(xí)的進(jìn)程總是遵循漸進(jìn)式的規(guī)律,跳躍式的一夜暴富只能是空中樓閣,所以耐心在學(xué)習(xí)過程中就顯得尤為重要。
單獨(dú)說說效率和速度的問題。程序的效率大致包含兩層含義
(1):執(zhí)行效率;
(2)開發(fā)效率。
執(zhí)行效率又可分為時(shí)間效率和空間效率,空間效率不在本貼討論范圍內(nèi),所以執(zhí)行效率簡化為速度來討論。之所以單獨(dú)拿出來說這個(gè)問題是因?yàn)檎搲芏嗵釉?速度"追逐上所表現(xiàn)出的"熱忱"比較極端,走的路比較偏執(zhí),希望初學(xué)者能夠以一個(gè)相對(duì)平和的心態(tài)來看待效率。
執(zhí)行效率與開發(fā)效率,從字眼上分析就知道,程序的最優(yōu)目標(biāo)是兩者并重。遺憾的是兼顧并非常態(tài),凸出一者的同時(shí)往往傷害到另一者。當(dāng)兩者出現(xiàn)矛盾時(shí),職業(yè)代碼工人較為普遍接受的原則是:"只有在必須考慮速度的時(shí)候才優(yōu)化執(zhí)行效率,否則以開發(fā)效率為重"。
換句話說,只有在不得不考慮優(yōu)化速度的時(shí)候執(zhí)行效率的目標(biāo)高于開發(fā)效率因?yàn)橐WC功能性,有效性。否則只考慮開發(fā)效率不考慮執(zhí)行效率。職業(yè)程序員和職業(yè)"玩家"在這個(gè)問題的認(rèn)識(shí)上經(jīng)常會(huì)產(chǎn)生分歧。
注重效率的程序員
設(shè)身處地的想一下,職業(yè)程序員在意的是什么?他們?cè)谝獾氖强焖?順利的完成工作,在意的是軟件的穩(wěn)定性,有效性盡量避免老板和客戶找他們的麻煩,最終目的就是掙錢,吃飯,養(yǎng)家?;ㄙM(fèi)幾個(gè)小時(shí)來提速幾個(gè)程序模塊,工資沒多一分錢,延誤了進(jìn)度,工期老板肯定不干?;谶@樣的原因,他們順理成章的注重與可維護(hù)性,穩(wěn)定性,擴(kuò)展性,重用性相關(guān)的開發(fā)效率。
追逐"手筋"的"玩家"~
相比較而言,職業(yè)"玩家"寫代碼并非為了工作,沒有項(xiàng)目壓力,無需考慮開發(fā)時(shí)間,開發(fā)成本,追逐的是華麗的"手筋",以及速度飆升所帶來的愉悅。其次,速度本身的屬性決定了它是一把極其規(guī)范,可量化的標(biāo)尺。基于速度為標(biāo)準(zhǔn)的代碼具有極強(qiáng)的博弈性和競技性,不僅可以獨(dú)樂還可以眾樂。
"有意義"和"無意義"
前邊我們就曾提過"有意義的快"和"無意義的快","有意義的快"可以包括兩種情況分別稱作"根本性速度提升"和"規(guī)模型速度提升"。
插播小故事:"這事兒不賴我"
某日一油漆工找到一份新工作:刷馬路中間的白線。
于是油漆工把一個(gè)油漆桶放到了起點(diǎn)上開始工作了。
第一天,油漆工刷了300米,老板大喜,夸獎(jiǎng)油漆工:"工作很出色!"
第二天,油漆工刷了150米,老板不露聲色,鼓勵(lì)油漆工:"工作干的不錯(cuò)!"
第三天,油漆工刷了30米,老板大怒,吼道:"今天只刷了第一天的1/10,到底怎么回事?"
油漆工回答:"這事兒不賴我呀!我每天距離油漆桶越來越遠(yuǎn)了啦!"
這個(gè)小故事形象的描繪了這樣一個(gè)事實(shí):改變工作方式可以帶來根本性的效率提高。在遇到類似于上述情況時(shí),初學(xué)者可考慮優(yōu)化代碼提升速度。
在VBA中當(dāng)遇到速度慢的不可忍受的情況時(shí),粗略的說可從以下幾點(diǎn)入手:
(1)合理化數(shù)據(jù)源的結(jié)構(gòu);
(2)用數(shù)組一次讀寫單元格內(nèi)容,避免頻繁操作單元格對(duì)象;
(3)查詢搜索改用Collection或字典。
所謂"規(guī)模型速度提升"是指對(duì)于應(yīng)用頻次高的問題,可以考慮一次優(yōu)化速度,應(yīng)用無數(shù)次,追求規(guī)模效應(yīng)降低開發(fā)效率損失。至于"非根本性速度提升"
的例子可以在論壇看到很多,諸如循環(huán)是用指數(shù)索引快?還是ForEach索引快?等等,這里就不一一列舉了。
用一句話來總結(jié):"程序的本質(zhì)是用機(jī)器來解放勞動(dòng)力,而不是用勞動(dòng)力解放機(jī)器!"
本來想寫很多內(nèi)容,一來由于沒什么初學(xué)者看所以無收獲可言;二來如果深入的話恐會(huì)戕害一些壇友的感情;三來目前此帖已有萬余字,再多就不像帖子了。再深入展開下去實(shí)屬下下策,故此樓略顯單薄,但基本意思都點(diǎn)到了。剩下關(guān)于算法和數(shù)據(jù)結(jié)構(gòu)的認(rèn)識(shí)和態(tài)度在本樓沒有提及。
到該結(jié)束的時(shí)候了,想必大家能理解本貼的態(tài)度:不褒不貶。你用,或者不用它,你喜歡,或者不喜歡它,它就在那里,不遠(yuǎn)不近,無所謂“強(qiáng)"無所謂”弱"。
一致性,對(duì)稱性是匹配的原則。對(duì)稱匹配,你收獲你想要的,Excel,VBA發(fā)揮應(yīng)有的效力;反之,錯(cuò)位匹配引發(fā)牽強(qiáng)附會(huì),捉襟見肘。既然談過了VBA的定位,自然不可避免的要談一下對(duì)其宿主Excel的認(rèn)識(shí)。話題就從這里開始吧......
靈活是把雙刃劍
相比VBA而言,Excel的邊緣性更強(qiáng)。相信大家都積累了多年的使用經(jīng)驗(yàn),是Excel的行家里手,提及某某功能如何實(shí)現(xiàn)均可娓娓道來。如果問一個(gè)這樣的問題:"Excel到底是什么?"一言以畢之,"電子表格工具"。這種定義只是給Excel起了個(gè)別名(alias),不是一種理解,認(rèn)識(shí)和定位。曾經(jīng)問過自己這個(gè)問題,我發(fā)現(xiàn)自己答不上來或者說自己的能力不足以回答這個(gè)問題。
邊緣性強(qiáng)主要表現(xiàn)在使用范圍廣泛,尤其它還是一款不斷升級(jí)的產(chǎn)品并且有諸多第三方插件對(duì)其進(jìn)行功能擴(kuò)展,這時(shí)候你會(huì)發(fā)現(xiàn)無論怎么回答這個(gè)問題都是錯(cuò)的,難免給初學(xué)者造成"Excel無所不能"的錯(cuò)覺。但如果不能予以概念上的定位,就無法回答"適度"使用的問題,結(jié)果就是一切和表格有關(guān)的工作都用Excel來做。
Excel簡單易用,功能強(qiáng)大,所見即所得(這可是個(gè)不得了的特點(diǎn)),這些都是耳熟能詳?shù)奶攸c(diǎn)。個(gè)人認(rèn)為Excel最大的特點(diǎn)來自于靈活:
(1)自由設(shè)計(jì)用戶自己的藍(lán)圖,天馬行空,個(gè)性十足;
(2)Excel分享了數(shù)據(jù)庫的一些特點(diǎn),具有一定程度的記錄和數(shù)據(jù)存儲(chǔ)的功能。雖然可以說Excel缺乏關(guān)系結(jié)構(gòu),但由于靈活的特點(diǎn),可以用工作表打造出關(guān)系結(jié)構(gòu);
(3)通過各種計(jì)算和圖表功能,提供多視角數(shù)據(jù)體驗(yàn);
(4)騰挪空間廣闊,運(yùn)用水平差異大。
然而靈活性并非是無成本的,靈活的同時(shí)就意味著規(guī)范性差,同樣功能的表格10個(gè)人設(shè)計(jì)出12樣兒來,格式,表頭,結(jié)構(gòu),實(shí)現(xiàn)方式等等花樣百出。
規(guī)范性差導(dǎo)致用戶交流困難,隨著邏輯業(yè)務(wù)設(shè)計(jì)復(fù)雜程度不斷提高,有效性控制繁雜,錯(cuò)誤幾率增大,急劇加重了設(shè)計(jì)者的負(fù)擔(dān)。邏輯業(yè)務(wù)關(guān)系越復(fù)雜設(shè)計(jì)成本的增長幅度就越大(呈非線性增長態(tài)勢)。前些日子看到一位壇友希望把一套表格封裝,表格集成了一套用公式表達(dá)的復(fù)雜邏輯業(yè)務(wù)關(guān)系。其實(shí)這套關(guān)系本身就是一道加密壁壘,把其中的邏輯梳理清楚比破解還費(fèi)勁。
個(gè)人的一點(diǎn)看法:既然很難在概念上抽象化Excel的定位,只好用一條條描述性的特征來概括Excel,但這種列舉是無法窮盡的。
從正面說:
(1)Excel"適用"于:邏輯業(yè)務(wù)關(guān)系相對(duì)簡單,數(shù)據(jù)規(guī)模不大,一鍋端式的集成應(yīng)用;(可惜無法量化定義"簡單","規(guī)模")
(2)對(duì)于業(yè)務(wù)邏輯復(fù)雜,規(guī)模較大的數(shù)據(jù),Excel"適合"充當(dāng)數(shù)據(jù)庫和用戶之間的緩沖層(buffer)。致力于數(shù)據(jù)的展示,整理,綜合,"分析"等體現(xiàn)靈活性的職責(zé)。
從反面說:(表象)
(1)避免用Excel設(shè)計(jì)大規(guī)模業(yè)務(wù)關(guān)系復(fù)雜的"系統(tǒng)";
(2)避免大量數(shù)據(jù)存儲(chǔ)造成Excel文件尺寸過大;(動(dòng)輒幾十上百M(fèi)的Excel文件經(jīng)常能夠看到)
(3)避免大量公式集成,重算可以導(dǎo)致文件打開速度過慢,運(yùn)行速度過緩;
(4)避免搭建Excel文件系統(tǒng);(幾十上百Excel文件組成的文件集也是屢見不鮮)
(5)......
上述情況可以適當(dāng)考慮使用數(shù)據(jù)庫的功能,畢竟他們之間是有本質(zhì)區(qū)別的。這里只是以我的觀點(diǎn)來看待Excel,“不適合"不代表Excel不能做到,最終的評(píng)判要交給用戶,誰用誰有話語權(quán)而不是設(shè)計(jì)者和所謂規(guī)范的探索者。在能意識(shí)到"隱患"的條件下,如果您覺得好用,完全可以避免庸人自擾式的思考,堅(jiān)持走自己的路。
既然Excel的特點(diǎn)是靈活,我們就以一個(gè)靈活的態(tài)度來認(rèn)識(shí)和對(duì)待它好了。
至此關(guān)于Excel和VBA的話題就告一段落了,最后再補(bǔ)充一句:
對(duì)于業(yè)務(wù)部門職員來說,Excel,VBA解決工作中的問題真的是夠用了,也是很好的選擇。如果不夠用說明您的工作應(yīng)該是由IT部門來完成的工作。業(yè)務(wù)部門的員工扛著VBA去干IT部門的工作,無論是工具和還是工作內(nèi)容都錯(cuò)位的離譜。
最后收錄一些經(jīng)典語錄。既然是收集,就是一個(gè)開放和相對(duì)漫長的過程,先把帖子的架子搭完,對(duì)觀眾有個(gè)交代,
【存在即合理】
<評(píng):理解"合理"的著眼點(diǎn)才能正確的認(rèn)識(shí),對(duì)待,運(yùn)用好這種存在。一言以畢之不是試圖掩蓋存在本質(zhì)的借口就是盲信。
【細(xì)節(jié)決定成敗】
<評(píng):方向決定"成"是否有意義。
【不管什么,只要學(xué)好了都?!?/p>
<評(píng):憤~青的態(tài)度抹殺客觀存在的差異性。
只要聽到"不管....只要....就...."的句子就是錯(cuò)的?