PR

【VBA】セル数のカウントをExcelバージョンで使い分ける

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、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プロパティについては以前別記事で投稿しておりますので、よろしければ以下をご確認ください。

【VBA】ExcelやOSのバージョンを取得する
こんにちは、Ryoです。 ExcelやOSが常に最新バージョンで統一されていれば良いのですが、現実的には難しいですから複数混在する環境になってしまうのが一般的ですよね。それぞれのバージョンはVersionプロパティやOperatingSys...

3.まとめ

今ではバージョンも2019なので、2003頃のエクセルを見かけることは稀のように思えますが、意外と未だに使用されていたりします。



今回のような内容は知っておくと置換する際にエラー発生を未然に防ぐこともできますので、有用かと思います。なかなか会社の中で使用するソフトのバージョン管理や統一も現実的には難しいことも多いですからね。

以上、セル数のカウントをExcelバージョンで使い分ける方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました