2

こんにちはすべてExcelでVBAを使用するのは初めてで、数値を調べて6桁の数値として返す関数を作成しようとしていました。

これを実現するために作成した関数は次のとおりですが、セルでコマンド= Res(A1)を使用すると、#VALUEが表示されます。答えとして。

現時点でのセル1の値は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はlongintegerの略で、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 に答える