VBA if else在excel中循环返回#VALUE

时间:2012-09-05 19:00:01

标签: excel vba excel-vba

大家好,我想在excel中使用VBA并试图创建一个能够查看数字并将其作为六位数返回的函数。

我写的尝试完成此操作的功能如下,但是当我在单元格中使用命令= 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

3 个答案:

答案 0 :(得分:9)

Function Res(myval As Integer) As Integer更改为:

Function Res(myval As Long) As Long

你正在达到整数最大值。

Long表示长整数,并且您希望在数字超过30k的任何时候使用它。

答案 1 :(得分:2)

您需要使用long而不是整数

整数仅涵盖-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

答案 2 :(得分:1)

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(仍然是7位数)

相关问题