VBA if else loop in excel, возвращающий #VALUE
Привет всем В новом для использования VBA в excel и пытался создать функцию, которая будет смотреть на число и возвращать его как шестизначное число.
Функция, которую я написал, чтобы попытаться выполнить это, ниже, но когда я использую команду = Res (A1) в ячейке, я просто получаю #VALUE! как ответ.
Значение в ячейке на данный момент составляет 30508.
Любая помощь, которую кто-либо может предложить решить, будет весьма признательна. Спасибо, парни.
Function Res(myval As Integer) As Integer Res = 0 If ((myval > 0) And (myval < 10)) Then Res = myval * 100000 ElseIf ((myval > 9) And (myval < 100)) Then Res = myval * 10000 ElseIf ((myval > 99) And (myval < 1000)) Then Res = myval * 1000 ElseIf ((myval > 999) And (myval < 10000)) Then Res = myval * 100 ElseIf ((myval > 9999) And (myval < 100000)) Then Res = myval * 10 ElseIf ((myval > 999999) And (myval < 10000000)) Then Res = myval / 10 Else Res = myval End If End Function
Изменить Function Res(myval As Integer) As Integer
:
Function Res(myval As Long) As Long
Вы получаете максимальный максимум.
Длинный означает длинное целое число, и вы хотите использовать его в любое время, когда ваш номер может превышать 30 тысяч.
Вам нужно использовать long вместо integer
целое число охватывает только от -32,768 до 32,767
длинные покрытия -2,147,483,648 до 2,147,483,647
Function Res(myval As Long) As Long Res = 0 If ((myval > 0) And (myval < 10)) Then Res = myval * 100000 ElseIf ((myval > 9) And (myval < 100)) Then Res = myval * 10000 ElseIf ((myval > 99) And (myval < 1000)) Then Res = myval * 1000 ElseIf ((myval > 999) And (myval < 10000)) Then Res = myval * 100 ElseIf ((myval > 9999) And (myval < 100000)) Then Res = myval * 10 ElseIf ((myval > 999999) And (myval < 10000000)) Then Res = myval / 10 Else Res = myval End If End Function
Function Res(myVal as long) As Long Res = myVal * 10 ^ ( 6 - Len(Cstr(myVal)) ) End Function
Примечание. Это все еще страдает от той же проблемы, что и исходный подход:
Если myVal – 9999999 (7 цифр), myVal / 10 – 999999,9, а Clng (999999,9) – 10000000 (еще семь цифр)