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