【问题标题】:Max of the difference between two arrays in UDFUDF中两个数组之间的最大差异
【发布时间】:2018-10-10 19:04:12
【问题描述】:

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

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

但是,我确实需要能够以这种方式引用范围:

WorksheetFunction.Max(Worksheets("Sheet1").Range("A1:A5") - Worksheets("Sheet2").Range("A1:A5"))

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

【问题讨论】:

    标签: excel vba user-defined-functions


    【解决方案1】:

    [] 是 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
    

    【讨论】:

    • 我尝试使用 Evaluate,它给了我“错误 2015”(我复制并粘贴了您的行)。这是什么意思?
    • @Xenedra 抱歉打错了。但是我再次建议您使用变体数组方法,对于更大的范围会更快,并且更易于阅读。
    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2021-03-22
    • 1970-01-01
    • 2012-03-08
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多