Я прочитал темы, которые касаются ошибок UDF #VALUE, и кажется, что либо я не знаю достаточно о VBA, чтобы иметь возможность использовать их, либо проблема, которую я имею, не то же самое.VBA UDF Excel 2010 #VALUE
В любом случае, я пытаюсь сделать 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.
Любая помощь на какую ошибку (ы) я сделал бы весьма признателен!
Спасибо!
Edit:
Я пытаюсь и блок Если для удовлетворения возрастов, содержащих «>» в начале. Например, 8: 6 и> 8: 6. Я думаю, что я, возможно, получаю ложный положительный результат поиска = 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
'Lengthz' равно 0 в строке' Monthz = Mid (YearsMonths, Colonz + 1, Lengthz - Colonz) ', потому что вы еще не установили значение. – Comintern
Разве вы не хотите что-то вернуть? как 'Function TOTALMONTHS (YearsMonths As String) как Long'? –
Я хочу, чтобы он возвращал целое количество месяцев - спасибо, я попробую те 2 сейчас! –