【发布时间】:2017-08-29 07:45:31
【问题描述】:
我正在编写一个用户定义函数 (UDF),它以一些单元格作为参数。 这些单元格包含相同的数据,但精度不同;该函数显示可用的最佳精度。
函数的参数按精度升序写入。
这是一个例子:
+---+-----------------+---------------------+
| | A | B |
+---+-----------------+---------------------+
| 1 | Best | =get_best(B5;B4;B3) |
| 2 | | |
| 3 | provisional | 1 |
| 4 | definitive | 2 |
| 5 | etched in stone | 12 |
+---+-----------------+---------------------+
函数显示 12,因为单元格 B5 中的信息比 B4 和 B3 具有更好的价值。因此,在公式参数中,B5 写在 B4 和 B3 之前。
我的UDF代码如下:
Public Function get_best(r1 As Range, r2 As Range, r3 As Range) As Variant
get_best = ""
If r3.Value <> "" Then get_best = r3.Value Else
If r2.Value <> "" Then get_best = r2.Value Else
If r1.Value <> "" Then get_best = r1.Value
End Function
有效!但我想对其进行编辑,以便它可以像=get_best(B7;B6;B5;B4;B3) 那样进行无限量的调整。
我怎么能这样做?
有用的评论: “单元格 B5 比 B4 和 B3 具有更好的值”意味着,例如,在 B3 中,您有 12 个月前计算的预测值。在单元格 B5 中,您有有效值和测量值。因此,当您拥有 B5 时,您不再需要 B3,因为“B5 比 B3 更好”
【问题讨论】:
-
用
Public Function get_best(r1 As Range, r2 As Range, r3 As Range, Optional r4 as Range, Optional r5 as Range, etc... ) As Variant怎么样? -
FWIW - 这些
If语句上的Else是多余的 - 如果有您需要的代码,您只需在单行 Ifs(甚至在块 Ifs 中)包含Else当条件为False时执行。
标签: vba excel user-defined-functions excel-udf