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

时间:2018-10-10 19:04:13

标签: vba 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"))

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

1 个答案:

答案 0 :(得分:5)

[]是“求值”的简写,它将返回一个数组。

因此,要使用范围一,就需要显式使用评估:

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