<< 図のリンク貼り付け | main | テーブルの左上セルを空欄にしたい >>

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





コメント
コメントする









この記事のトラックバックURL
トラックバック
[VBA] Long 型同士の乗算がエラーにならない理由
田中さんのブログに、Excel 2007 に関する、以下のような実験コードがありました。次のようなコードもオーバーフローします。Sub Sample1() Dim n n = Rows.Count * Columns.Count MsgBox n End Subなぜか次のように明示的にWorksheetオブジェクトを指
  • Orator's IO
  • 2007/12/09 9:38 PM
Topページへ戻る
カレンダー
   1234
567891011
12131415161718
19202122232425
2627282930  
<< September 2010 >>
プロフィール

Excel MVP
スポンサードリンク
リンク
Office TANAKA

Excel 2010 Preview Blog

Office TANAKA 不定期ブログ

Excel World

VSUG

拙著
拙著
拙著
拙著
拙著
categories
archives
recent comment
recent trackback
others
mobile
※当ブログではPNG形式の画像を使っているため、携帯では画像を表示できないこともあります。
search this site.