雖然知道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