マクロで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オブジェクトを指定してやると、全行数×全列数の計算結果は取得できるようです。理由は調べていませんが、不思議ですね・・・てゆーか、早いとこ直して欲しいです。