2012-02-16 6 views
0

数字の最大の素因数を見つけようとしています。このVBAプリミティブデータ型とは何ですか?

数値の最後に#記号を付けたダブルタイプを淡色にしました。 double型の制限ですが、私はmodulus関数のようなものをやりたいのでなければ、算術演算を実行することができます。私はそれが私のオーバーフローエラーなります下のコードを実行した場合:

Sub test() 

Dim x As Double 
x = 600851475143# 
x = x - 1 
x = x Mod 11 


End Sub 

をしかし、私は、コードを変更し、VBAを私の変数を宣言し、許可しない場合は、それを行うにはモジュラス機能は、オーバーフローなしで動作します。以下に示す:

Sub test() 

x = 600851475143# 
x = x - 1 
x = x Mod 11 

End Sub 

したがって、2番目のコードセットでは、xの変数タイプは何ですか?

答えて

4

@Bluefeetが正しいことであるバリアントに宣言されていない変数のデフォルトデータ・タイプ。 しかし、「バリアント」のような内部型はありません。内部で格納される内容は、変数に割り当てられた値によって異なります。コピー

Sub test1() 
Dim x As Variant: Debug.Print TypeName(x) 'Empty' 
      x = 1: Debug.Print TypeName(x) 'Integer' 
     x = 32768: Debug.Print TypeName(x) 'Long' 
     x = 32767: Debug.Print TypeName(x) 'Integer' 
     x = Null: Debug.Print TypeName(x) 'Null' 
      x = 1.1: Debug.Print TypeName(x) 'Double' 
     x = Empty: Debug.Print TypeName(x) 'Empty' 
      x = "": Debug.Print TypeName(x) 'String' 
x = 600851475143#: Debug.Print TypeName(x) 'Double' 
End Sub 

をし、上記のコードを貼り付けて、それを実行すると、あなたは「バリアント」は型の名前として返されることは決してありませんことを確認できます:あなたは値がTypeName()関数を使用して処理されているか調べることができます。最後の行はあなたに興味のある行です。

+0

あなたは正しいです!それは本当に奇妙です、私が最初に働いたコードを実行したとき。非常に奇妙な – JKK

+0

それは、入力をヒットすることを意味しなかった..しかし、デバッグのヒントありがとう。私はそれに慣れるためにデバッグ側についていくつかの情報を得る必要があります。より広範なVBAプロジェクトを行うように私は送られてきました。私はすでにその限界に打ち勝っています! Yikes ..しかし、それはそれが何であるか、少なくともクラスとインターフェースをサポートしています! – JKK

+0

詳細情報をお寄せいただきありがとうございます.VBAで非常に長い値600851475143を適切にサポートするデータ型がある場合、または実行できないことがありますか?私はJavaでこれを解決することができますが、VBAの数学の限界について興味があることは分かっています – JKK

2

あなたは常にデータ型を宣言する必要がありますが、あなたがデータ型を宣言しない場合、デフォルトではVariant

VBA Variant

Most of the time, you should declare your variables with specific data types, such as String, Long, or Double. VBA supports the Variant data type that can hold any type of data. If you omit the As Type clause in a variable declaration, Variant is the default type. While this may seem useful, it increases processing time when encountered in code because behind the scenes, the compiler has added no small amount of code to test what type of data is actually stored in the variable. Moreover, using a Variant can mask possible Type Mismatch errors that should be caught during testing. Instead of using a Variant type, declare the variable with a specific data type.

+0

答えをいただきありがとうございます。私は通常、オプションを明示的に使用していますが、この場合はVBAで非常に大きな数値をサポートするデータ型を探していました。 1つがあるかわからない – JKK

+0

* Explicit *と* Specific *は異なるものです。 'Dim x As Variant'は明示的です。それは具体的ではない。 –

+0

ok?しかし、オプション明示的に変数を宣言する必要があります。そうしないと、コードは正しく実行されません。だから、私が何を意味したのか、私は通常自分自身に変数を宣言して、私のプロジェクトの誤植を減らします。 – JKK

関連する問題