Максимальная разница между двумя массивами в UDF - PullRequest
0 голосов
/ 10 октября 2018

Мне удалось заставить функцию работать (вычитает один массив из другого и дает мне максимум различий) с помощью следующего кода:

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

Однако мне действительно нужно иметь возможностьобратитесь к диапазонам следующим образом:

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

Я пробовал это, и это не работает.Почему один метод диапазона работает, а другой нет?

1 Ответ

0 голосов
/ 10 октября 2018

[] - это сокращение от 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
...