Excel VBA自定義函數編寫(UDF, User-Defined Function)

雖然知道Microsoft Office Excel能夠支持用VB語言來進行復雜的編程和自定義函數的編寫,可是一直以來都沒有這個需求。編程

此次遇到的問題是要根據一列數組計算出一個值,但計算過程又比較複雜,須要通過幾步,若是不編程的話總要通過一些中間單元格來完成計算,但這又會使得整個表格變得很臃腫,而且不方便添加新列。數組

在這種狀況下,編寫自定義函數幾乎成了惟一的出路。所幸,也並不太麻煩。編輯器

 

1. 首先,可能要在選項裏啓用下開發工具,保存文件的類型也得換成xlsm。函數

2. 打開VB編輯器編寫代碼,添加模塊,寫本身的函數,寫完也不須要編譯,在Excel表格裏就可以使用。工具

3. 這個VB編譯器仍是灰常的初級,因此寫代碼不是很方即是必然的,提示和補全功能都比較弱,忍忍。另外,不熟悉Excel相關的類結構致使寫代碼時也比較難寫,幸好我只是寫了些簡單的操做。開發工具

4. 即便是對於單元格簡單的運算,由於有多種狀況,如不是有效的值,要本身寫起來仍是挺麻煩的;而最方便的方法是調用系統原來有的方法。spa

 

帖一個此次寫的函數,是由一列收益求最大回撤。code

 1 Function JDrawBack(rRange As Range)
 2     Dim N As Long
 3     Dim D As Double
 4     Dim CurrentMax As Double
 5     Dim CurrentMaxDrawBack As Double
 6     CurrentMaxDrawBack = 0
 7 
 8     For Each cl In rRange
 9         D = WorksheetFunction.Sum(cl, D)
10         If D > CurrentMax Then
11            CurrentMax = D
12         End If
13 
14         If CurrentMax - D > CurrentMaxDrawBack Then
15             CurrentMaxDrawBack = CurrentMax - D
16         End If
17     Next cl
18 
19     JDrawBack = CurrentMaxDrawBack
20 End Function            
相關文章
相關標籤/搜索