excel - UDF中两个数组之间的最大差异

标签 excel vba user-defined-functions

我已经设法使用以下代码使函数正常工作(从另一个数组中减去一个数组,并给出最大的差异):

WorksheetFunction.Max([Sheet1!A1:A5 - Sheet2!A1:A5])

但是,我确实需要能够以这种方式引用范围:
WorksheetFunction.Max(Worksheets("Sheet1").Range("A1:A5") - Worksheets("Sheet2").Range("A1:A5"))

我已经尝试过了,但它不起作用。为什么一种范围方法有效而另一种无效?

最佳答案

[]是 Evaluate 的简写,它将返回一个数组。

因此,要使用 Range,需要明确使用 Evaluate:

Application.Evaluate("MAX(" & Worksheets("Sheet1").Range("A1:A5").Address(1, 1, 1, 1) & "-" & Worksheets("Sheet2").Range("A1:A5").Address(1, 1, 1, 1) & ")")

但是将值加载到变量数组中然后迭代它以找到 MAX 可能会更快:
Dim Sht1 as variant
Sht1 = Worksheets("Sheet1").Range("A1:A5").Value

Dim Sht2 as Variant
Sht2 = Worksheets("Sheet2").Range("A1:A5").Value

Dim Mx as Double
Mx = -99999999

Dim i as Long
For i = Lbound(Sht1,1) to Ubound(sht1,1)
    If sht1(i,1) - sht2(i,1) > Mx then Mx = sht1(i,1) - sht2(i,1)
Next i

Debug.Print Mx

关于excel - UDF中两个数组之间的最大差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52747143/

相关文章:

excel - Do While 循环以每秒闪烁一次单元格正在扼杀性能

excel - Vba 查找完全匹配

vba - 检查值是否存在于范围内而不循环

excel - Access/Excel VBA - 跳过每个循环

c# - 如何提高调用 Web 服务的 Excel UDF 的性能?

ColdFusion:获取在 Application.cfc 的 onError 方法中引发错误的函数的参数

excel - 使用电子表格::SimpleExcel

c# - Excel 工作表错误

excel - 刷新 Excel VBA 函数结果

arrays - 如何编写 VBA 用户定义函数以使用 ctrl+shift+enter 从 IF 获取数组参数?