VBA技術解説
セル個数を返すRange.CountLargeプロパティとは

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2023-09-08 最終更新日:2023-09-08

セル個数を返すRange.CountLargeプロパティとは


VBAにおいて最も良く使われるオブジェクトはRangeオブジェクトなのはいうまでもないですね。
このRangeオブジェクトには多数のプロバティが用意されています。

Rangeのプロパティ一覧
・Excel2010までのRangeオブジェクトのプロパティ一覧 ・Excel2016で追加されたRangeオブジェクトのプロパティ一覧 ・スピルにより追加されたRangeオブジェクトのプロパティ一覧
Rangeのメソッド一覧
・Excel2010までのRangeオブジェクトのメソッド一覧 ・Excel2013で追加されたRangeオブジェクトのメソッド一覧 ・Excel2016で追加されたRangeオブジェクトのメソッド一覧

Rangeオブジェクトに含まれるセルの個数を取得できるプロパティは2つあります。
Count
CountLarge


最初のCountは良く使うので皆さん知っている事でしょう。

最終行取得のコードでも使われていますね。
第18回.最終行の取得(End,Rows.Count)|VBA入門
・エクセルVBAにおける最終行取得の必要性 ・.End(xlDown):Ctrl+↓ ・.End(xlUp):Ctrl+↑ ・Endプロパティの方向(↑↓←→)について ・セルの行数を取得するRowプロパティ ・Cells(Rows.Count, 1).End(xlUp).Rowを日本語に訳す ・EndプロパティがRangeオブジェクトを返す ・Endプロパティの問題点 ・最終行に関するサイト内のページ

では、もう一つの CountLargeとは何か・・・
CountとCountLargeを順に見ていくことにしましょう。



Countプロバティ

Office2003以前からあるプロパティです。

VBA マクロ CountLarge LongLong

データ型は、Longです。
Longなので値の範囲は、
-2,147,483,648 ~ 2,147,483,647

Excel2003までの.xls形式のシートの大きさは、
行数:65,536
列数:256
つまりシートの全セル数は16,777,216
Long型に入る数値範囲です。

VBA マクロ CountLarge LongLong


CountLargeプロバティ

Office2007以降に追加されたプロパティです。

VBA マクロ CountLarge LongLong

データ型は、Variantです。
Variantなので値の範囲は、、、VBAが扱える範囲なら何でも入ります。

Excel2007以降のxlsxやxlsmのシートの大きさは、
行数:1,048,576
列数:16,384
つまりシートの全セル数は17,179,869,184
Long型には入りきらない数値です。

VBA マクロ CountLarge LongLong

PropertyではVariantとなっていますが、実際のデータはLongLongですので、
Variant/LongLong
このようになっています。
※LongLongについては後述します。

上記のVBAでは、全セル数を取得しているので、
v = Cells.Count
これで実行すると、オーバーフローしてしまいます。

VBA マクロ CountLarge LongLong


実際にはシートの全セル数を取得しても仕方ないので、
普通は限られた範囲のRangeオブジェクトのセル数を取得することになると思います。
限られた範囲であれば、Countでも大抵の場合は問題ありません。
CountはLongなので21億まで入りますので、普通は問題ありません。
しかし、列全部のセル数となると列数が多くなってくるとオーバーフローしてしまいます。
具体的には、
1048576*2048=2,147,483,648
これでLongでは1オーバーしてしまう大きさとなります。


LongLong型について

LongLong型は64ビットのExcelでサポートされるデータ型です。
64ビット符号付き数値で、
-9223372036854775808 ~ 9223372036854775807
※64ビットプラットフォームのみで有効な宣言型です。
32ビットのExcelではサポートされないデータ型になりますので、32ビットでは、
VBA マクロ CountLarge LongLong

すると、ここでちょっと疑問がでてきます。
32ビットExcelでxlsxのシートの全セル数を取得したらどうなるのか・・・
※CountLargeプロパティは32ビットExcelでも存在します。

VBA マクロ CountLarge LongLong

変数vはVariantなので値は入りますが、VBA・VBEはデータ型を認識できません。
VBA マクロ CountLarge LongLong

32ビットではLongLongをデータ型として正式に扱えないというだけです。
Variantの1形式として扱う事は出来ますので、Variantに入れさえすれば計算に使ったり普通に扱うぶんには困る事はありません。

VBA マクロ CountLarge LongLong

Variantの1形式として扱うということでは、Decimalと同じくらいに扱えると考えれば良いかもしれません。
CDec関数
・CDec関数 ・CDec関数の使用例 ・10進型 (Decimal)について ・データ型変換関数一覧
VBAの小数以下の演算誤差について|VBA技術解説
・小数以下の演算誤差とは ・小数以下の演算誤差を実際のVBAで確認 ・データ型で小数以下の演算誤差に対応 ・小数以下の演算誤差にデータ型以外で対応する ・VBAの小数以下の演算誤差の最後に
100桁の正の整数値の足し算|ツイッター出題回答
ツイッターで出したVBAのお題です。数の単位に「無量大数」というものがあります。VBAでこの無量大数の足し算をするにはどうしたら良いでしょうか。そこで、100桁の正の整数の足し算をVBAで実現してみましょう。


LongPtrについて

WinAPIを扱う場合には必須となってくるのがLongPtrです。
LongPtrは、32 ビット環境と64 ビット環境で それぞれ以下に変換されます。
32ビットシステムでは、符号付き32ビット (4 バイト) の数値、つまりLong
64ビットシステムでは、符号付き64ビット (8 バイト) の数値、つまりLongLong

上記のセル数を取得するVBAでは、32ビットでもLongLongを扱いたかったので、このLongPtrの出る幕はありませんでした。




同じテーマ「マクロVBA技術解説」の記事

Select Caseでの短絡評価(ショートサーキット)の使い方
RangeオブジェクトのFor EachとAreasについて
画像が行列削除についてこない場合の対処
新関数SORTBYをVBAで利用するラップ関数を作成
LAMBDA以降の新関数はVBAで使えるか
数字(1~50)を丸付き数字に変換するVBA
文字列のプロパティ名でオブジェクトを操作する方法
OneDrive使用時のThisWorkbook.Pathの扱い方
セル個数を返すRange.CountLargeプロパティとは
画像「セルに配置」のVBAについて(365の新機能)
VBAでクリップボードへ文字列を送信・取得する3つの方法


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ