Функция не определена, когда я пытаюсь определить любой тип функции - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь получить абсолютную разницу между двумя диапазонами, если они имеют одинаковое количество элементов

Пробная перезапись как частная и обычная функция, но не работает

Function absDiff(rng1 As Range, rng2 As Range) As Single
Dim rng1Count As Long, rng2Count As Long

rng1Count = rng1.Count
rng2Count = rng2.Count

If rng1Count = rng2Count Then
    absDiff = SumProduct(Abs(rng1 - rng2))
Else
    MsgBox "Error, ranges are not the same size"
End If
End Function

Iожидаю, что функция получит абсолютную разницу, но она даже не запускается, она определена на модуле 1, и я пытаюсь вызвать ее к сабвуферу в том же модуле

Sub calcAbsdiff()
Dim rng1 As Range, rng2 As Range

Set rng1 = Range("A1:A10")
Set rng2 = Range("B1:B10")

rng1 = WorksheetFunction.RandBetween(1, 100)
rng2 = WorksheetFunction.RandBetween(1, 100)

MsgBox "The sum of the absolute difference is " & absDiff(rng1, rng2)

End Sub

1 Ответ

0 голосов
/ 28 октября 2019

Что я понимаю, попробуйте это:

Public Function absDiff(rng1 As Range, rng2 As Range) As Single
Dim rng1Count As Long, rng2Count As Long, i As Long

rng1Count = rng1.Count
rng2Count = rng2.Count
absDiff = 0

If rng1Count = rng2Count Then
    For i = 1 To rng1Count
        absDiff = Abs(rng1(i).Value2 * rng2(i).Value2) + absDiff
    Next i
Else
    MsgBox "Error, ranges are not the same size"
    absDiff = "Error"
End If
End Function

Кажется, что он заключается в том, что ваш расчет непосредственно по диапазону может не сработать, поэтому просто зациклите SumProduct. Вы получите # ЗНАЧЕНИЕ! ошибка как результат, если диапазоны не совпадают. (Если нет, то это будет 0)

Проверьте, достаточно ли одного для функции.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...