VBA如何編寫Vlookup公式整理財產目錄 - 會計

Cara avatar
By Cara
at 2017-08-26T09:37

Table of Contents


VBA如何編寫Vlookup公式整理財產目錄

網誌圖文版:

http://www.b88104069.com/archives/4234

Vlookup是《會計人的Excel小教室》主打的兩大招式之一,對於會計工作有很大幫助,在
整理和補充報表時,往往會用到Vlookup函數公式。但,由於它是「比對特定條件查找並
傳回儲存格內容」,聽起來就比較消耗計算資源,有經驗的讀者應該遇到過,在筆數量巨
多、查找範圍寛廣的情況,Excel一定當場卡關給你看,然後CPU使用率瞬間飇昇50%以上
……。我自己工作便有幾個例行性檔案,資料少說幾萬筆,而且系統產生出來的報表有所
不足,必須以Vlookup函數補好補滿,每次把公式往下拉到底,惡夢於焉開始,我的工作
,跟著我的電腦一起被Excel綁架了。在此分享個人在Excel及VBA如何減輕計算負擔的小
技巧(簡單版和複雜版):

一、極簡版本的資產目錄,只有6筆資料,大企業絶對是這個的好幾N倍。

二、「資產代碼」、「資產類別」、「會計科目」,這些是原報表沒有、但很想要有的資
料,必須以Vlookup帶入。

三、儲存格「G4」的公式:「=LEFT(A4,2)」,儲存格「H4」的公式:「=VLOOKUP(G4,二
!A:C,2,0)」,儲存格「I4」的公式:「=VLOOKUP(G4,二!A:C,3,0)」,有修過《會計人的
Excel小教室》學分,應該都會寫像這樣的函數公式。

四、如同文章一開始所述,如果資料量大,好幾萬個Vlookup同時運作,結果可想而知。
解決辦法之一:上方功能區移到「公式」頁籤、「計算」區塊,將「計算選項」下拉,有
「自動」、「除運算列表外,自動重算」、「手動」三個選項。「自動」是只要儲存格有
任何變動,包括自動儲存時,都會再跑一次幾萬個Vlookup(其實沒必要)。「除運算列
表外,自動重算」主要是搭配Excel一個「模擬分析」的應用,有機會再作分享。「手動
」則是這篇文章推薦的方法之一,設置後Excel不會主動重算,除非操作者按下這個功能
區塊裡的「立即重算」指令。

五、手動重算縱然有其妙用、而且操作簡單,但往往工作中會同時開好幾個Excel檔案好
幾個工作表,手動重算只能在「都不重算」和「一起重算」兩者之間控制,在靈活度上等
於是沒有。最好的解決方案應當是需要時再重算這幾萬筆Vlookup,就這幾萬Vlookup,其
餘不受影響。想達到這樣的效果,只有編寫VBA程式碼了。首先在這個步驟重點介紹VBA的
「UsedRange.Rows.Count」和「For…Next」。

10:建立一個巨集程序,取名為「UsedRange_Left」。

30:很實用的標準程式碼,計算目前工作表的資料行數,設定其值為「R」,如同步驟一
的圖片所示,這裡的R值為10。

40:在儲存格「G1」輸入「R」值。

60:設置一個從「4」到「R-1」的迴圈,變數為「i」,於此範例即為4到9。

80:利用「Left」函數取儲存格文字串的左邊兩個字元,並且設定其值為「C」。例如當i
=4時,「Left(Cells(4, 1), 2)」即為「OF」。

90:在儲存格「(i,7)」輸入「C」值,例如當i=4時,亦即於「G4」輸入「OF」。

110:完成一次循環,跳回到「For…」執行下一個「i」。

130:結果此程式。

六、執行結果,如圖所示。「G1」為「10」,表示資料含標題共有10行。「G4」在資料編
輯列為「OF」,即使把它的引用對象儲存格「A4」清除,「OF」仍然在,這代表Left函數
是在VBA執行時計算,把結果值輸入於Excel儲存格中,在Excel並沒有任何函數公式,因
此也不會有公式計算的問題。

七、在先前VBA的基礎上進一步編寫程式碼:

90:在迴圈「For i = 4 To R - 1」中再套一個迴圈「For j = 2 To 4」,第一個「i」
迴圈類似於Excel公式往下拉、好幾個Vlookup的效果,第二個「J」迴圈類似於一個個的
Vlookup,相當於模擬一行一行往下查找的效果。

110~130:白話解釋程式碼,如果「C」(Left(Cells(i, 1), 2))等同於Sheets("二
").Cells(j, 1).Value,那麼將「Sheets("二").Cells(j, 2).Value」輸入在「Sheets("
八").Cells(i, 7).Value」。用心琢磨這一段程式碼,應當能理解其執行效果,便是函數
公式「VLOOKUP(G4,二!A:C,2,0)」。

150~170:另外一組Vlookup,前面查找的是資產類別,這裡查找的是會計科目。嚴格比較
VBA程式碼和Excel函數公式,只有在如果有兩個查找條件同時成立,VBA程式碼取的是成
立的最後一行內容,Excel的Vlookup函數會取成立的第一行內容,這部份文字說明較為抽
象,日後有機會再以適當範例作介紹,總之於實務工作中,很少會遇到因此所產生的困難


八、一如預期,以VBA巨集實現Vlookup計算結果,除非再執行一次巨集,否則Excel再怎
麼自動計算或自動儲存,都不會再作這方面的處理,所以當然也不會影響電腦速度。

這節範例用到了一般應用程式中很常見的迴圈語句。如果肯花時間閱讀理解,它其實相當
於高中數學方程式的概念,應該不難理解,它的概念。這裡的VBA程式碼就是單純依照
Vlookup函數的運作邏輯,把工作表上的每一個儲存格當做對象來做計算處理。擴大而言
,在現有的函數公式裡面,只要有涉及到範圍,從哪個儲存格到哪個儲存格的,都可以寫
成VBA的一個迴圈,從這個角度來思考VBA程式碼,會是一個蠻有趣的過程、也會比較有成
就感。


延伸閱讀:

VBA如何自動建立資料夾(下)

http://www.b88104069.com/archives/4193

VBA如何合併報表資料

http://www.b88104069.com/archives/4220

VBA如何保持檔案乾淨

http://www.b88104069.com/archives/4230

--


周末,我們繼續Excel:精華區=>21.心得=>5.其他=>3.office

會計人的Excel小教室: https://www.facebook.com/acctexcel


--
Tags: 會計

All Comments

巫老師成會DVD(105/106)

Charlie avatar
By Charlie
at 2017-08-25T23:53
如題 想徵求105或106成會DVD及講義 請已經過此科的同學來信報價 感謝 - ...

來喔要買書的(中會、審計、記帳士、洗錢)

Brianna avatar
By Brianna
at 2017-08-25T22:31
來喔 若你要買來書中會、審計、記帳士的 若你要買張老師中會3th上下冊 NT760*2 http://www.books.com.tw/products/0010759803 http://www.books.com.tw/products/0010745647 李老師建然 審計學 NT779 http ...

成管會(巫師) 高會(巫師) 審計(金永勝)

Dinah avatar
By Dinah
at 2017-08-25T15:50
大家好 想詢問以下課程大家是否有二手函授課程可以出售, 低調可。謝謝大家! 審計 金永勝師 成管會 巫毓琪師 高會 巫毓琪師 - ...

大陸普華永道pwc薪水

Candice avatar
By Candice
at 2017-08-25T14:59
想請教有沒有前輩知道 現在PWC大陸的Graduate programe薪水如何?(不需要特別會計系畢業的) 跟台灣的差距大概是多少? 台灣PwC跟中國PwC最大的不同是在哪裡? 謝謝 - ...

高點高會 林立老師

Ethan avatar
By Ethan
at 2017-08-25T14:20
目前台中高點高會面授只有林立老師 版上沒有太多相關評價 所以想詢問一下版上各位的意見 - ...