Cells.Countがオーバーフロー


マクロでCells.Countを取得しようとするとオーバーフローします。これは、ベータ版で発見して報告したバグですが、製品版でも直っていないようです。残念。

たとえば、次のコードはエラーになります。

オーバーフローしているのは黄色い行です。

これは当然ですね。Long型では入るはずがありません。

しかし、受ける変数をDoubleに変えても

それならバリアント型では

いずれにしてもエラーです。

ここでは、Cells.Countを変数に代入していますが「MsgBox Cells.Count」でも「Debug.Print Cells.Count」でも「If Cells.Count > 1 Then」でもオーバーフローします。

どうやら、そもそもCellsのCountが怪しいようです。

オブジェクトライブラリで調べてみると

なるほど、Countプロパティ自体がLong型で宣言されているのですね。Excel 2007はワークシートの領域が広がりましたので、全セルの合計は17,179,869,184個です。Long型の許容値2,147,483,647を楽に超えています。おそらくこれが原因でしょう。

ちなみに、次のようなコードもオーバーフローします。

ここまでのマクロは標準モジュールに書きました。これをSheet1などのシートモジュールに書くと、エラー表示が異なります。

これではデバッグもできませんね。

もっとも、なぜか次のように明示的にWorksheetオブジェクトを指定してやると、全行数×全列数の計算結果は取得できるようです。理由は調べていませんが、不思議ですね・・・てゆーか、早いとこ直して欲しいです。