だれかのなにかに役立てるウェブ制作者YoTaの趣味ブログ

VBA「実行時エラー6:オーバーフローしました」の原因と対処法

先日、エクセルVBAで、最終行の番号を取得する「Range("D7").End(xlDown).Row」を使ったところ、「実行時エラー6:オーバーフローしました。」というエラーが生じました。

原因はデータ型のミスで、今回はIntegerをLongに修正して改善しました。

オーバーフローしたサンプルコード

下記のように「clear」ボタンを押すと、

セル範囲「D7~Range("D7").End(xlDown).Row」までを削除するVBAを作成していました。

しかし、これはセル「D7」だけにデータがある状態で「clear」を押すと、

このように「実行時エラー6:オーバーフローしました。」となってしまいます。

デバッグを確認したら、「Range("D7").End(xlDown).Row」のところでエラーが生じていました。

原因

原因は、変数の定義、つまり、データ型です。

エラー発生時、変数「data_num」をIntegerにしていたのですが、VBAのIntegerは「-32,768~32,767」の整数を定義します。

しかし、「Range("D7").End(xlDown).Row」で今回のようなエラーを起こすと、その範囲内では収まらない値が返却されるので、そこでオーバーフローのエラーとなるそうです。

※詳細は、こちらの記事様にすごく詳しくまとめてありました!
Range("A1").End(xlDown).Rowはデータがないとき・1行しかデータがないときに何を返すのか

対処法

範囲の話なので、データ型をLongにすることで、解決しました。

まとめ

VBAでオーバーフローのエラーが出た時は、今回のようにデータ型を確認してみると解決に役立つかもしれません!

ページ上部に戻る