Я проверил, как создавать UDF-массивы с одной ячейкой, и не могу понять, что я видел, поэтому я подумал, может быть, мне лучше спросить!
Мне было интересно, может ли кто-нибудь помочь мне выяснить, как преобразовать мой UDF во что-то, что может обрабатывать диапазон, вывод которого затем можно было бы усреднить.
Я создал UDF, чтобы найти количество месяцев в возрасте в следующем формате:
Chronological Age
8:1
8:2
8:9
8:1
8:0
7:10
8:9
UDF выглядит следующим образом:
Function GDAgeToMonths(YearsMonths As String) As Integer
Dim Colonz As Integer, Yearz As Integer, Monthz As Integer, Greaterz As Integer
' check if the stings consists of ">" sign
If InStr(YearsMonths, ">") >= 1 Then
Greaterz = 2
Else
Greaterz = 1
End If
' check position of ":" or "." sign
If InStr(YearsMonths, ":") >= 1 Then
Colonz = InStr(YearsMonths, ":")
Else
Colonz = InStr(YearsMonths, ".")
End If
Yearz = Mid(YearsMonths, Greaterz, Colonz - Greaterz)
Monthz = Right(YearsMonths, Len(YearsMonths) - Colonz)
GDAgeToMonths = Yearz * 12 + Monthz
End Function
Итак, я подумал о чем-то вроде:
Function GDAverageAge(AgeRange As Range) As Integer
Dim MonthsRange As Range, AverageMonths As Double
MonthsRange = GDAgeToMonths(AgeRange)
AverageMonths = WorksheetFunction.Average(MonthsRange)
GDAverageRange = GDMonthsToAge(AverageMonths)
End Function
С помощью функции ниже, чтобы вернуть среднее значение от месяцев к возрасту:
Function GDMonthsToAge(NumberofMonths As Integer) As String
Dim Yearz As Integer, Monthz As Integer
Yearz = NumberofMonths \ 12
Monthz = NumberofMonths - (12 * Yearz)
GDMonthsToAge = Yearz & ":" & Monthz
End Function
Я очень надеюсь, что это имеет смысл!
Я действительно не знаю, должна ли это быть формула массива как таковая или она будет что-то делать с диапазоном, но я в основном планирую использовать формулу для усреднения результата выполнения формулы для каждой ячейки в диапазоне.
Любая помощь будет принята с благодарностью!
Спасибо за уделенное время!