Long型の範囲は-2,147,483,648(-2の31乗) から 2,147,483,647(2の31乗 – 1)です。-2,147,483,648(-2の31乗)より小さい値や、2,147,483,647(2の31乗 – 1)より大きい値をMod演算子で使うとオーバーフローが発生します。 オーバーフローが発生するコード例
CLng関数は、引数をLong型(長整数型)に変換します。CLng関数 CLng(expression) 引数expressionには任意の文字列式または数式を指定します。この引数は必ず指定します。引数がLong型(長整数型)に変換できない場合はエラーとなります。 長整数型(Long)型は整数しか格納できない点に留意してください。小数点以下の数値は格納できません。次のマクロで確認してみましょう。 Sub Sample2() Dim tmp As Long tmp = 10 / 4 MsgBox tmp End Sub 10÷4は2.5です。しかし、変数tmpには2しか入っていません。 エクセルのVBAで整数型(Integer)に変換して返すにはCInt ... CInt関数の引数(expression)の値に「-32,768 ~ 32,767」以外を設定するとオーバーフローが発生します。 ... 長整数型(Long)に変換してを返 … VBAで10進数<->16進数変換 10進数→16進数に変換組み込み関数のHex()を使う。DimstrHexstrHex=Hex(6)'"6"を返す。strHex=Hex(10)'"A"を返す。strHex=Hex(734)'"2DE"を返す。Hex関数から戻るのは、Variant型に入った文字列なので、桁数をそろえるには、文字列操作により行う。str4Hex=Right("000"&Hex(734),4)'"02DE"を返す。 VBAで整数値を扱うデータ型にはInteger型とLong型がありますよね。使い分ける必要ってあるの?どっちを使うかで処理速度が変わってくるの?検証してみました。
Dim x As Long x = 2000 * 365 ' Error: Overflow Dim x As Long x = CLng(2000) * 365 この状態を回避するには、次のように数値を入力します。 To work around this situation, type the number, like this: Dim x As Long x = CLng(2000) * 365 ここで、「数値」を扱うデータ型の種類が多いことに気が付くと思います。プログラム内で行や列、テーブルのインデックスを扱うのであれば、整数型の「 Long 」を使うと良いでしょう。 32 ビットアプリケーションになって「 Integer 」を使う意味はほとんどありません。 『オーバーフローしました。』についての対処方法です。このエラーの原因は、変数の最大値を超えた値を格納したためです。対処方としては適切な型に値を入れましょう。 VB6です。 こんな現象初めてでびっくりしました。変数A、h、mはLong型です。A = 9 * 3600 + 54 * 60 ->オーバーフロー発生A = 35640 ->オーバーフローにならないh = 9 : m = 54A = h * 3600 + m * 60 ->オーバーフローにならない変数で
いつもありがとうございます。先日までは普通に動いていたんですが、他のBOOKからマクロを動かしたらオーバーフローとなってしまいました。更に単体で動かしてもオーバーフローとのエラーが出てしまいます。 Sub SQL抽出()Dim firstday As StringDim lastday As St Excel VBA マクロのデータ型を紹介します。数値の Integer や文字列の String や日付の Date などさまざまな型があります。変数には型にあった値を代入する必要があります。そうでない値は自動で変換されるかエラーになります。 Sub Test11() Dim i As Long, j As Long, k As Long Dim v1, v2 Debug.Print Now For i = 1 To 1000 For j = 1 To 1000 For k = 1 To 1000 Selection.Count でオーバーフロー 今回はVBAの技術的な話です。 Excel2007になってから問題になっていたのは以下のようなカウント。 ふつうは選択されたセルの数を数えて一定数以上だと「大量のセルが選択されています!」と