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