• Excel VBA自定义函数编写(UDF, User-Defined Function)


    虽然知道Microsoft Office Excel可以支持用VB语言来进行复杂的编程和自定义函数的编写,但是一直以来都没有这个需求。

    这次遇到的问题是要根据一列数组计算出一个值,但计算过程又比较复杂,需要经过几步,如果不编程的话总要经过一些中间单元格来完成计算,但这又会使得整个表格变得很臃肿,并且不方便添加新列。

    在这种情况下,编写自定义函数几乎成了唯一的出路。所幸,也并不太麻烦。

    1. 首先,可能要在选项里启用下开发工具,保存文件的类型也得换成xlsm。

    2. 打开VB编辑器编写代码,添加模块,写自己的函数,写完也不需要编译,在Excel表格里就能够使用。

    3. 这个VB编译器还是灰常的初级,所以写代码不是很方便是必然的,提示和补全功能都比较弱,忍忍。另外,不熟悉Excel相关的类结构导致写代码时也比较难写,幸亏我只是写了些简单的操作。

    4. 即使是对于单元格简单的运算,因为有多种情况,如不是有效的值,要自己写起来还是挺麻烦的;而最方便的方法是调用系统原来有的方法。

    帖一个这次写的函数,是由一列收益求最大回撤。

     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            
  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/shyanye/p/4298256.html
Copyright © 2020-2023  润新知