VBA UDF Excel 2010 #VALUE

时间:2016-09-19 18:49:48

标签: excel vba excel-vba user-defined-functions udf

我已经阅读了关于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

在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

我不知道如何做"如果"位,也无法弄清楚如何将代码放在下面的评论中...提前感谢!!

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

这是允许"的最终代码:"或"。"分隔符和">"符号:

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

1 个答案:

答案 0 :(得分:0)

尝试下面更新的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列中的单元格需要格式化为文本)

enter image description here

相关问题