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無法以上述格式解釋年齡,因此他們需要先將其轉換爲若干個月,但我不想爲此創建另一列。 –