0
我已经检查过如何制作单元数组UDF,但无法制作头部或尾部,所以我想也许我最好问一下!将一个UDF转换为一个数组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
我真的很希望这是有道理的!
我真的不知道它是否必须是一个数组公式,或者它是否会用范围做某些事情,但我基本上打算使用公式来计算公式在每个单元格上运行的结果的平均值范围。
任何帮助将受到感谢!
谢谢你的时间!
没有UDF必须是数组公式,因为您在UDF自身的代码中构建了重复计算。此外,没有UDF可以将值写入工作表上不是包含UDF的单元格的单元格中。但是,一系列单元格可以包含一个UDF,并像'任何其他本地工作表公式'一样可以'数组输入'。 – Jeeped
谢谢你 - 我想我明白你的意思。我想要创建的UDF将在一个范围内,将其转换为数月,平均值,将其转换回年,然后在写入的单元格中报告它。就像在Excel中使用平均函数时一样在执行平均计算之前,将单元转换为“可平均”格式。换句话说,我想从一列年龄中获得平均年龄。 Excel无法以上述格式解释年龄,因此他们需要先将其转换为若干个月,但我不想为此创建另一列。 –