大家好,我想在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
答案 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位数)