« Openメソッドを使ってURLが存在するか確かめる | トップページ | Format関数を使ったのに違う表示形式が自動で適用される件 »

2011年6月12日 (日)

あるあるエラー:Integer型

VBAを使い始めて少したつと経験するであろうエラーです。

最初のころはよく理解できないままやっているので、
整数を使うときは全部Integer型を使っていました。

しかし徐々に多くのデータを扱い始めると
このようなエラーに遭遇します。
Vba20110612a

特に今まで問題なかったのに突然このエラーが発生すると
原因がわからず首をひねります。
原因がわからないエラーほど単純な原因だったりします。

このエラー何が原因でしょうか?

Integer型は、-32,768 ~ 32,767 の範囲の整数をとるので
この範囲を超える値をInteger型に入れようとすると
オーバーフローします。

例えばこんなコードで突然このエラーが起きたりします。

    Dim i As Integer
   
    For i = 1 To Range ("D1").End(xlDown).Row
   
        '…
       
    Next I

このコードの次の箇所、

Range("D1").End(xlDown).Row

この値が32,767を超えるとオーバーフローします。
この値は、
セルD1から下の方向に
値が連続して入っている一番下の行を返します。

ですから扱う行数が多くなるとFor文に使う変数は
Long型にしなければいけません。

また、上のコードの箇所は
D列に何も値が入っていないときもエラーになります。

D列に何も値が入っていないとき、
上のコードの箇所はシートの最終行数を返すからです。

わかれば単純なんですけど、わからないと

オーバーフローって何?
日本語で言って…

という気持ちになります。

|

« Openメソッドを使ってURLが存在するか確かめる | トップページ | Format関数を使ったのに違う表示形式が自動で適用される件 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: あるあるエラー:Integer型:

« Openメソッドを使ってURLが存在するか確かめる | トップページ | Format関数を使ったのに違う表示形式が自動で適用される件 »