Я пишу формулу для использования в ячейке, чтобы выполнить вычисление для столбцов данных в зависимости от того, что она видит под заголовками столбцов (диапазоны, используемые в качестве параметров).Код работает в vba, но возвращает #VALUE!в клетке.Моя проблема сводится к использованию неправильного синтаксиса в ячейке для передачи диапазонов в функцию.
Функция имеет значение
Function MultiComp(Date1 As Range, Delta1 As Range, Date2 As Range, Delta2 As Range)
'Do Stuff
'Return answer as a double or "Insufficient" if no data is available
End Function
и работает в VBA при вызове другой функцией в строке:
Range("K25") = MultiComp(Range("B4"), Range("F4"), Range("M4"), Range("Q4"))
, но показывает # ЗНАЧЕНИЕ!в ячейке при использовании:
"=MultiComp(B4, F4, M4, Q4)"
Это должно быть относительно простое исправление синтаксиса, но я не могу определить его для жизни.
Я пробовал варианты Range(B4), Range ("B4"), B4: B4, попытка использовать косвенный код и приведенный ниже код в качестве управляемого примера, который в ячейке вел себя как ожидалось "= RangeTest (J20)".
Function RangeTest(Here As Range)
MsgBox (Here.Address & " is range Address" & vbNewLine & Here & " is range Value")
End Function
РЕДАКТИРОВАТЬ: полный код
Function MultiComp(Date1 As Range, Delta1 As Range, Date2 As Range, Delta2 As Range)
Dim wsf As WorksheetFunction
Dim ws As Worksheet
Dim V1w, V2w As Variant
Set wsf = Application.WorksheetFunction
Set ws = ThisWorkbook.Worksheets("TestingPage")
A = FindRecentDates(Date1)
V1 = wsf.Transpose(RangeFromTop(Delta1, A).Value)
ReDim V1w(1 To UBound(V1))
For i = 1 To UBound(V1w)
V1w(i) = ws.Range("A1") - (wsf.Days(Now(), Date1.Offset(i - 1, 0)))
Next i
V1SumP = wsf.SumProduct(V1, V1w)
V1Weight = wsf.Sum(V1w)
TotalSumP = TotalSumP + V1SumP
TotalWeight = TotalWeight + V1Weight
B = FindRecentDates(Date2)
V2 = wsf.Transpose(RangeFromTop(Delta2, B).Value)
ReDim V2w(1 To UBound(V2))
For i = 1 To UBound(V2w)
V2w(i) = ws.Range("A1") - (wsf.Days(Now(), Date2.Offset(i - 1, 0)))
Next i
V2SumP = wsf.SumProduct(V2, V2w)
V2Weight = wsf.Sum(V2w)
TotalSumP = TotalSumP + V2SumP
TotalWeight = TotalWeight + V2Weight
'/Calculating Average/
If TotalWeight = 0 Then TotalWeight = 1
WeightedDelta = (TotalSumP / TotalWeight) '/ Denominator
MultiComp = UndoDelta(WeightedDelta)
If TotalSumP = 0 Then MultiComp = "Calculating"
End Function
который сам вызывает дополнительные функции, я не совсем уверен, что этого будет достаточно для работы с этим.