4

イミディエイト ウィンドウを使用してデバッグを行ったところ、この質問のために簡略化した次のようなものに出会いました。

このコマンドの実行:

?20000*2

「オーバーフロー」エラーが発生します。これは、データ型を宣言しておらず、VBE が想定していたことが原因であると仮定しましょうInteger。結果が符号付き整数の境界の外にあるため、オーバーフローが発生します。

ただし、実行すると:

?39999+1

私は40000期待通りに取得します。

これは、私が最初Longに an ではなくa から始めたからIntegerでしょうか (つまり、20,000 対 39,999)? したがって、計算結果ではなく、最初の入力データに基づいてメモリが割り当てられますか?

4

2 に答える 2

6

そのとおりです。VBA は最大の入力コンポーネントを取得し、結果にメモリを割り当てます。最初の例のコンポーネントは両方とも Int であるため、取得できるのはそれだけです。

型宣言文字を使用して、VBE に数値を特定のデータ型として処理させることができます。

?20000&*2
 40000 
?20000*2&
 40000 

これらの両方の例で、& (Long 型宣言文字) は、Long へのメモリ割り当てを強制します。最初のコンポーネントかそれ以降のコンポーネントかは問題ではありません。特定のデータ型に強制される操作がいくつかあると思います。累乗もその一つです。

?2^2^2^2^2^2
 4294967296 
?typename(2^2^2^2^2^2)
Double

すべてのコンポーネントが整数であっても、結果は Double です - 必要がない場合でも

?typename(2^2)
Double
于 2015-04-17T18:15:33.863 に答える