2

大家好,在 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
4

3 回答 3

9

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

Function Res(myval As Long) As Long

您正在达到整数最大值。

Long 代表长整数,你想在你的数字超过 30k 的任何时候使用它。

于 2012-09-05T19:18:04.243 回答
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
于 2012-09-05T19:22:13.720 回答
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 位)

于 2012-09-05T21:06:20.090 回答