のバリエーションを使用しようとすると、一部の SO ユーザーが問題に遭遇するのを見てきましたCells.Count
。場合によっては、VBA コードがオーバーフロー エラーをスローします。
参考までに、この回答のコメントを参照してください。
これでうまくいくと思いますが、「オーバーフロー」エラーが発生し、「If Master.Cells.SpecialCells(xlCellTypeVisible).Count > 0 Then」というコードが表示されます --- 特に何もフィルタリングしていないようです– user1556069
そしてこの答え:
後者は整数、16ビット、最大値65,536を使用し、スプレッドシート全体がより大きな数値を返したため、これは機能していますか(そしてCells.Countは機能しませんでしたか)?– fast_code
舞台裏のどこかで、VBA がセル数を小さな整数 (16 ビット) または長整数 (32 ビット) に強制しようとしていると想定しています。Excel 2007 ワークシートのセル数は、これらのデータ型の両方をオーバーフローします。残念ながら、Excel 2007 のコピーが手元になく、エラーを実際に再現できないため、今すぐ特定することはできません。– mwolfe02
これを理解しようとして、私は自分自身を再現しようとしましたがCells.Count
、整数として割り当てようとするとオーバーフローが発生しました。整数データ型には値が大きすぎるため、これは理にかなっています。
以下のコードを Excel 2003 と 2010 の両方で使用すると、Long または Variant として代入しようとすると、数値の結果が得られました。
Option Explicit
Sub testInteger()
Dim i As Integer
i = Cells.Count 'Overflow
Debug.Print i 'Doesn't get this far...
End Sub
Sub testLong()
Dim l As Long
l = Cells.Count
Debug.Print l 'Prints 16777216 in both versions
End Sub
Sub testVariant()
Dim v As Variant
v = Cells.Count
Debug.Print v 'Prints 16777216 in both versions
End Sub
私のコメントでわかるように、Cells.Count
値は16777216
(2003 年には正しい) ですが、両方のバージョンで同じであり、私には意味がありません。上記のリンクされた回答の 1 つからmwolfe02を引用するには:
Excel 2007 ワークシートには、1,048,576 行と 16,384 列、合計 17,179,869,184 セルがあります。
これは、2010年に印刷された値が少なくとも(実際には同じであるべきだと私は信じています)17,179,869,184
.
では、なぜこの数値が正しく印刷されないのか、2003 年の値が 2010 年に返されるのはなぜでしょうか?