VBA UDF Excel 2010 #VALUE

VBA UDF Excel 2010 #VALUE

我已经阅读了关于 UDF #VALUE 错误的线程,似乎我对 VBA 的了解不够,无法使用它们,或者我遇到的问题不一样。

无论哪种方式,我都试图制作一个 UDF 来根据我创建的公式以 YY:MM 格式计算一个年龄段的月数。

Function TOTALMONTHS(YearsMonths As String)
Colonz = WorksheetFunction.Find(":", YearsMonths)
Yearz = Left(YearsMonths, Colonz - 1)
Monthz = Mid(YearsMonths, Colonz + 1, Lengthz - Colonz)
Lengthz = Len(YearsMonths)
TOTALMONTHS = Yearz * 12 + Monthz
End Function

以上代码 returns 在 Excel 2010 年实施时出现 #VALUE 错误。

如能对我所犯的错误提供任何帮助,我们将不胜感激!

谢谢!

编辑:

我正在尝试和一个 If 块来满足开头包含“>”的年龄段。 例如,8:6 和 >8:6。我想我可能在开始时对 search=1 结果产生了误报,但不知道为什么。

Function TOTALMONTHS(YearsMonths As String) As Integer
If WorksheetFunction.Search(">", YearsMonths) = 1 Then
Greaterz = 2
Else
Greaterz = 1
End If
Colonz = WorksheetFunction.Find(":", YearsMonths)
Yearz = Mid(YearsMonths, Greaterz, Colonz - Greaterz)
monthz = Right(YearsMonths, Len(YearsMonths) - Colonz)
TOTALMONTHS = Yearz * 12 + monthz
End Function

我不知道如何做 "If" 位,也不知道如何将代码放在下面的评论中...提前致谢!!

使用下面的答案解决了 - 非常感谢!

这是允许使用“:”或“.”的最终代码。分隔符和“>”符号:

Function TOTALMONTHS(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)
TOTALMONTHS = Yearz * 12 + monthz

End Function

尝试下面更新的 UDF 代码:

Function TOTALMONTHS(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 ":" sign
Colonz = InStr(YearsMonths, ":")

Yearz = Mid(YearsMonths, Greaterz, Colonz - Greaterz)
monthz = Right(YearsMonths, Len(YearsMonths) - Colonz)
TOTALMONTHS = Yearz * 12 + monthz

End Function

您可以在下面找到我测试此 UDF 代码的数据样本:

(请记住,B 列和 E 列中的单元格需要设置为文本格式)