讀古今文學網 > 別怕,ExcelVBA其實很簡單 > -序- >

-序-

VBA,讓效率飛起來

當加班成為常態,改變在所難免

十年前的我,加班是家常便飯的事,每天成堆的工作總是壓得我喘不過氣來,我和同事們就像一枚枚棋子,蜷縮在辦公室裡,在電腦前緊張地忙碌著,不知目睹了多少個華燈初上到燈火闌珊的夜晚。

2000年8月的一天我的目標是完成生產成本核算系統的最後一個報表模塊的開發。有了它,就可以方便地查詢和計算每一種產成品在任意一個工序上的成本明細項目,還可以在不同月份之間進行結轉、對比。

我喜歡在晚上寫程序,因為晚上安靜,能讓我的思路飛揚,讓代碼隨著鍵盤聲快速地推進,等待大功告成的那一刻出現。

你不會以為我是程序員吧?

不,事實上,我是財務部的成本主管。我就職於一家製造型企業,有IT部門,但是沒有程序員。說白了,我就是千百萬個成天和Excel表格「耳鬢廝磨」的一員。

我們公司的產品有幾十種,涉及的材料有幾千種,每個產品又有N道工序,每道工序由數量不等的作業人員進行生產。我的工作,就是計算和分析所有產成品和半成品的生產成本,包括材料、人工和雜費。計算依據主要包括生產部門提交的各產品工序的工時記錄表,倉庫提交的材料進銷數據,HR部門提供的工資單明細。

這樣的計算任務並不輕鬆,計算目標複雜,原始數據繁多,有些甚至不是電子文檔,而且只有我一個人。再而且,時間非常緊張,因為每個月交報表的時間是固定的。

也許你想問,這麼複雜的計算用Excel?你們公司難道沒有ERP嗎?

有的,而且聲名不小,價格不菲。但在我看來,公司的ERP雖有一定的作用,不過卻存在很多局限性,局部線條偏粗,又有些笨拙,很難給出我需要的結果。

所以,我必須借助Excel。

回想中學時的《政治》課本上說,資本家為了搾取更多的剩餘價值,有兩種方法:一是延長工作時間,二是提高生產效率。我現在清楚地認識到,為了及時準確地完成計算任務,方法同樣有兩個:加班,或者提高計算效率。

我當然不願意加班。同時,加班的產出也是有限的,並不能解決任務重時間緊的根本性問題。

所以,我必須提高效率。

一次自動核算成本系統的開發經歷,讓我受益無窮

自從接了公司的生產成本核算系統這個活,我的Excel水平突飛猛進。從最初的焦頭爛額,到現在的從容應對,我通過不斷優化計算方法,完善成本核算模板,減輕工作量。

有人說,學好Excel可以以一當十。年輕的我憑著一腔熱情,還真沒有注意到:公司的產品規模在不斷擴大,計算任務隨之加重,我依然可以按時交報表。由於我捨得下力氣去研究,直到後來協助工作的同事被上司調派去負責別的內容。

我的想法很簡單,多做就是多學習,付出一定有回報。

我的成本核算模板,按產品區分,主要使用的是Excel的函數、公式和數據透視表,可以實現成本計算的半自動化——輸入原始數據,結果自動生成。原始數據,一部分來源於上個月的成本數據,一部分從ERP中導出。

模板完善後,我的工作重心不再是計算,而是處理這樣那樣的原始數據。這是一件相當繁瑣無聊的事情。導出、保存、打開、複製、粘貼、切換、關閉,奈何我200APM[1]的手速,因為涉及幾百個文件的數據處理,至少得一兩天時間,處理過程中還很容易出錯。

問題是,公司的產品數量一直在增加,並處於變化中,這讓我再次想起了「水管工的故事」。

於是,我決定繼續挖掘Excel的潛力,其實也是我自身的潛力。兩個月以後,我用Excel VBA代碼替代了80%的成本原始數據處理工作。只要按一次鍵,數據就能乖乖地按規定的路線在幾百個Excel文件之間流轉,就像歡樂的浪花在美麗的小河中蕩漾。

說真的,沒有什麼事情,比看著自己寫的代碼正常運行,讓複雜無比的工作灰飛煙滅的感覺更有成就感了。

瞭解到Excel VBA與眾不同的威力後,我的激情再一次被點燃,我決定要自己寫一個成本計算分析系統,我希望以後每個月的成本計算分析都是全自動的。

經過持續不斷地學習和研究,我想,今天晚上,終於可以達成了這一目標了。

透視VBA的知與行

轉眼間邁入2012年了。

我們都生活在信息社會中,生活在一個前所未見的充斥著海量數據的年代。無論是企業還是個人,每天都要接觸無數以數據為載體的信息。

數據,甚至已經成為了企業或個人的替代品。

不相信?

一家你未曾親身到訪甚至未曾接觸過其產品的企業,對你來說意味著什麼?它無非會成為財務報表或統計報表上的一堆林林總總的數據,諸如生產規模、員工人數、利潤水平…

一個你未曾謀面未曾聽說的人,對你來說意味著什麼?就好像進入婚戀網站搜索對象,這些陌生人只不過是個人指標數據的集合體,諸如身高、體重、職業、收入…

想要在這樣一個時代生存,處理數據的能力是必須的,因為實在有太多數據要處理了。廣大Excel的用戶,尤其是Excel的重度用戶肯定對此深有體會。

作為Excel Home的站長和一名培訓講師,我接觸過許多各式各樣的數據處理要求,也體驗或親身參與過許多基於Excel的解決方案。這些寶貴經驗讓我對Excel提供的各項功能有更深的理解。

在Excel中製作計算模型,主力軍非函數與公式莫屬。300多個不同功能的函數在公式中靈活組合,可以創造無數種算法,再加上數組和名稱的配合使用,幾乎可以完成絕大多數計算任務。

要論數據分析和報表生成的便捷,不得不提到數據透視表,這是Excel最厲害的本領,厲害在於其功能強大的同時,使用起來卻非常簡單。

但如果只會這兩樣,仍然會有很多時候感到束手束腳,究其根本在於以下幾方面。

1.函數和公式只能在其所在的位置返回結果,而無法操作數據表格的任意位置,更不能操作表格的任意屬性(比如設置單元格的填充色,或刪除單元格)。

2.函數和公式、數據透視表都需要規範的數據源,但往往我們工作量最大之處就在於獲取和整理原始數據。比較麻煩的情況之一就是原始數據很可能是位於某個文件夾下的幾十份表格。

3.使用函數和公式、數據透視表製作的解決方案,難以具備良好的交互性能。因為它們只能存在於單元格中,與普通數據是處於同一個平面的。

4.對於業務流程較為複雜、數據項經常變化的計算很難處理。

5.無法迅速省力地完成大量的重複操作。

所以,永遠不要忘記Excel還有一個殺手級的功能——VBA。

VBA是什麼,怎麼用,在本書中會給出詳細的答案。這裡,我只想說,只有這個功能才真正讓Excel成為了無所不能的數據處理利器,才讓我們有機會可以徹底地高效辦公。

很多人認為VBA很神秘,認為會寫代碼是自己不可能實現的事情。雖然我不能保證人人都能學會VBA,但我可以保證如果你能學會函數和公式,你也能學會VBA,因為它們的本質是相同的。函數和公式無非是寫在單元格中的一種簡短代碼罷了。

所以,如果你曾經覺得自己連Excel函數和公式也搞不定,現在卻能熟練地一口氣寫下好幾個函數嵌套的公式,那麼你學VBA不會有問題。

在我眼裡,VBA就好像「獨孤九劍」。這武功最大的特點是遇強則強,遇弱則弱。如果你每天面對的數據非常有限,計算要求也很簡單,那麼用VBA就是高射炮打蚊子了。但如果你是Excel重度用戶,經常需要處理大量數據,而Excel現有功能無法高效完成計算任務時,就可以考慮讓VBA上場,一舉定乾坤。

今時不同往日,互聯網的發展使得技術和經驗的分享非常方便。如果說十年前你想用VBA實現任何一個小功能都需要先掌握全部語法,然後一行一行代碼自己寫的話,那麼現在Excel Home上有太多太多現成的實現不同目標的VBA代碼,許多代碼甚至已經到了拿來即用的程度。

所以,如果你的時間非常有限,也沒有興趣成為一個Excel開發者,你只需要快速地學習掌握Excel VBA的基本語法,然後到互聯網上去淘代碼來用到自己的工作中。如果你投入的時間多一點點,你會發現你很快就能看懂別人的代碼,然後做出簡單的修改後為自己所用。這個過程,是不是和你當年學Excel函數和公式的經歷很類似?

等你做到這一步,你會發現原來公司裡那個很厲害的會寫代碼的Excel高手的秘密武器原來是這樣的啊,以後可以少請他吃飯以換取他為你寫個小功能了…

因為工作的關係,我接觸過很多信息化工具,也瞭解過一些編程語言,我發現所有工具的本質是相通的。每種工具都有其優缺點,有其專屬的場合。這種專屬並非指不可替代,而是說最佳選擇。

因此,我不贊成VBA至上的觀點,因為儘管VBA無所不能,但如果我們事事都寫代碼,那還要Excel本身的功能幹嘛?我也反對VBA無用的觀點,你暫時用不上怎麼能說明此工具無用?甚至說,你根本就不會用這工具,怎麼知道你用不上?

用VBA,是為了更高效。不用,也是因為同樣的目的。

但是,會了VBA,你將擁有高效的更多種選擇。不會,你就沒有。這一點,高效人士都懂的。

Excel Home創始人、站長 周慶麟

2012年2月22日

[1] APM, 指每分鐘擊鍵次數。