VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

跳槽那些事兒 Excel VBA專家 2019-06-25

VBA是我們工作中,特別是對於長期與數據打交道、用EXCEL較多的朋友而言,是非常值得利用的一種工具,甚至說是可以起到立竿見影的效果,也不為過。之前用幾小時甚至一天的工作,在用了VBA後可以在幾分鐘甚至幾秒鐘來完成。這種體驗有朋友告訴我說就是一個字"爽"。每當我看到這些朋友的回覆時,真是由衷得高興。能引導大家走上方便工作的大路也是我最為高興的事。

很多朋友在學習VBA的過程中,確實很下功夫,其中新入職場的年輕人,有近不惑之年的朋友,也有和我一樣快50歲的朋友,甚至還有比我大的朋友,都在一起努力著。為了讓自己的工作更出色,為了讓可以節約出時間陪父母和親人,都在嘗試努力著。我的宗旨是不變的:分享成果,隨喜正能量,就是把我20多年的VBA成果分享給需要的朋友,隨喜正能量給同路人.我會把我的經驗無保留的給大家.

今天和大家說的是EXCEL函數和VBA代碼實現同一個目的誰優先的問題。最近很多朋友在糾結於這個問題,那麼我給大家指導一二。

一 什麼是EXCEL函數,和VBA函數的區別

1什麼是EXCEL函數呢?就是我們平時在EXCEL工作時用到的函數,如SUM () SUMIF() COUNT() COUNIF() 等等,

2 什麼是VBA函數呢? 就是我們在VBA中可以直接利用的函數,這類函數比較少:如isdata ,isempty,isnumeric等等

3 EXCEL函數(下面稱為工作表函數)和VBA函數的聯繫;有些函數是可以通用的 如TRIM() LEFT() RIGHT() 等;有些是不可以通用的,如SUM() SUMIF 。

二: 有沒有辦法在VBA中利用工作表函數呢?在《VBA代碼解決方案》第二冊中我專門的講到這個問題:

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

在第49講中我講到:

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

這講中我給出了了工作表函數,的普遍應用方法代碼,如:

Set rng = Range("A1:H10")

d = Application.WorksheetFunction.Sum(rng)

或許正是這節內容的作用,很多的朋友在VBA代碼中編寫時常常採用工作表函數,而放棄了一些基本的VBA變量判斷的方法,其實,這是有所偏見的。

這裡需要提醒大家幾點:

1我在《VBA代碼解決方案》中突出講的是程序運行的效率,其實在我們實際工作中,大多在運算效率上的要求並沒有太高,無非是幾秒鐘的差異,完全可以不用考慮,

2 工作表函數在應用時各個參數有著非常嚴格的要求,不能出錯。

3 工作函數在VBA中的表示和EXCEL中是不同的.

4 在VBA中,採用工作表函數還是變量的判斷,需要較為靈活的運用。

三 下面我們結合實際看看為了達到我們的目的,工作表函數和VBA代碼中變量求解的方案有什麼不同。

實例:如下的工作表,求數據1和數據2相乘後的和。

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

方案一:利用工作表函數在工作表中實現:這時在D7單元格中錄入公式:=SUMPRODUCT(A2:A6,B2:B6) 即可實現:

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

方案二:在VBA中利用工作表函數實現,函數要用WorksheetFunction為開頭的,如下:

Sub SumProduct()

Range("d8") = WorksheetFunction.SumProduct(Range("A2:A6"), Range("B2:B6"))

End Sub

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

運行後的結果,在D8的單元格顯示了最後的結果:225,這時要注意表示單元格名稱的變化,前面加上了range().下面為運行的結果;

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

方案三: 那麼還有沒有其他的辦法呢?有的,用VBA變量求和來實現。我們看代碼:Sub SumProduct2()

i = 2

k = 0

Do While Cells(i, 1) <> ""

k = k + Cells(i, 1) * Cells(i, 2)

i = i + 1

Loop

Range("d9") = k

End Sub

代碼截圖:

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

最後看運行的結果:

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

方案四:還有沒有其他的辦法呢?如果你熟悉了《VBA代碼解決方案》你一定會想到了第一冊:

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

下面我們看看用這講的內容來完成我們的要求:

代碼:

Sub SumProduct3()

Range("d10").Formula = "=SUMPRODUCT(A2:A6,B2:B6)"

End Sub

代碼截圖:

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

看看運行的結果:

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

上述的四種方案給大家都列出來了,不知讀者是認可哪一種方案呢?

其實我們不要拘泥於任何的固定模式,要實際問題實際分析,不要一味地追求運行的效率而忽視了我們的真正目的。在我的經驗中,如果能在工作表中解決的在工作表中解決,如果需要複雜的函數,涉及到的參數很複雜的,就要發揮代碼變量的作用,來達到目的。

VBA應用經驗:工作表函數和代碼變量,你選擇哪種方案?

所以大家在學習《VBA代碼解決方案》時要理解,以實際的問題為切入點,要綜合的考慮問題,千萬不要片面。

相關推薦

推薦中...