こんにちは、Ryoです。
最近のExcelバージョンを使用している上では問題ないのですが、2007以前と以降ではセル数が異なりますのでCountプロパティではオーバーフローエラーが発生します。この場合はCountLargeプロパティを使用することで対処できますので、今回はその内容について書いていこうと思います。
1.CountLargeプロパティ
今ではExcel2007以前を見かけることは少ないので問題になることは殆どないのですが、旧⇒新への置き換え等で稀にそのような環境に遭遇した際に発生する可能性があるエラーを回避する上で知っておくと良いと思います。
構文:オブジェクト.CountLarge
このCountLargeプロパティはExcel2007から追加されたプロパティで、Excelはバージョン2007からワークシートサイズ(行数・列数)が変更されて大きくなっています。その為、それまでのバージョンでは問題なかったCountプロパティで全てのセルをカウントしようとするとオーバーフローになる為、CountLargeプロパティを扱うということです。
具体的な変化として、Excel2003では65,536行×256列でしたがExcel2007以降では1,048,576行×16,384列(全セル数:17,179,869,184セル)になっていますので、かなり巨大化しています。
このCountプロパティとCountLargeプロパティは基本的に同じ機能なのですが、扱える桁数が異なっており、Countプロパティ=Long型(-2,147,483,648~2,147,483,647の整数)に対しCountLargeプロパティはVariant型(全てのデータ格納可)になります。
2.サンプルコード
Excel2007以降で全セルをカウントする場合、以下のようにCells.CountLargeでOKです。
Sub Sample1() MsgBox "全セル数:" & Cells.CountLarge End Sub
但し、Excel2007の前バージョン(2003など)ではCountLargeプロパティは使用できないのでVersionプロパティを使用して処理を分ける必要があります。
Sub Sample2() 'Excelバージョンを判定する(12以上=2007以降) If Val(Application.Version) >= 12 Then 'Excel2007以降ならCountLargeプロパティ MsgBox "全セル数:" & Cells.CountLarge Else 'Excel2007以前ならCountプロパティ MsgBox "全セル数:" & Cells.Count End If End Sub
ここで使用しているVersionプロパティについては以前別記事で投稿しておりますので、よろしければ以下をご確認ください。
3.まとめ
今ではバージョンも2019なので、2003頃のエクセルを見かけることは稀のように思えますが、意外と未だに使用されていたりします。
今回のような内容は知っておくと置換する際にエラー発生を未然に防ぐこともできますので、有用かと思います。なかなか会社の中で使用するソフトのバージョン管理や統一も現実的には難しいことも多いですからね。
以上、セル数のカウントをExcelバージョンで使い分ける方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo