[VBA] Countプロパティで行数と列数を取得します

 この記事では、VBA の Countプロパティを使ってセル範囲の行と列を数える方法を解説します。
 

Countプロパティで行と列を数えます

 特定のセル範囲の 行数を数える ときは、Range.Rows.Count で、列数を数える ときは Range.Columns.Count で数えます。試しにセル B2:D8 を選択して行と列を数えるマクロを書いてみましょう。

'[VBA] セル範囲を選択して行数と列数を数えるマクロ

Sub Count_Rows_Columns_1()

  '行数と列数を入れる変数を宣言しておきます
  Dim ctr As Integer
  Dim ctc As Integer

  'セル範囲を選択します
  Range("B2:D8").Select

  'セル範囲の行数と列数を数えましょ~
  ctr = Selection.Rows.Count
  ctc = Selection.Columns.Count

  '数え終わったら表示します
  MsgBox "選択されたセル範囲は" & ctr & "行" & ctc & "列" & "です"

End Sub

 Count_Rows_Columns_1()を ぽちっと実行してみると、メッセージボックスに行数と列数が表示されます。

 RowsプロパティとColumnsプロパティでセル範囲の行と列を数える

 今回、注目するコードはここです。
 金八先生ふうに言うと「は~い。ちゅうも~く!」です。
 別に金八先生ふうに言わなくてもいいけどね。

ctr = Selection.Rows.Count

 Selectionプロパティで取得した Rangeオブジェクトから、Rowsプロパティで選択範囲の行を参照して、Countプロパティでその数をかぞえて、変数 ctr に放り込んでいます。その次のコード

ctc = Selection.Columns.Count

では選択範囲の列を数えています。Rows も Columns も頻繁に使うプロパティなので使い方をしっかり覚えてね。
 
 次はワークシートにデータベースがあって、その行数と列数を数えるマクロです。データは何でもいいんだけど、すぐに用意できない人は次のデータをコピーして B2 セルに張り付けてくださいな。

書籍名 著者 出版社
「さくらんぼ戦場」 旗根史穏 夕暮舎
「ふしぎな人間」 藥師雄大 中学教育出版
「魅惑の漫画」 小寺山文健 夏風社
「手作り心理学」 宮前伸吏 黒石館
「女が何だっていうの?」 三沢卓平 山海新社
「日本のタイガーマスク」 西ノ薗顕三 春夏社
「夕暮れ自伝」 三沼隆洸 早川ブック
「気まぐれふるさと」 古崎雅継 大和舎

 こんなマクロを書いてみましたよ。

'[VBA] アクティブセル領域の行数と列数を表示するマクロ

Sub Count_Rows_Columns_2()

  Dim ctr As Integer
  Dim ctc As Integer
  Dim mystr As String
  Dim myrange As Range

  mystr = "選択されたデータの大きさは"

  'オブジェクト変数 myrange にセル範囲を放り込みます
  Set myrange = Range("B2").CurrentRegion

  'セル範囲の行数と列数を数えます
  ctr = myrange.Rows.Count
  ctc = myrange.Columns.Count

  '数え終わったら表示します
  MsgBox mystr & ctr & "行" & ctc & "列" & "です"

End Sub

 Count_Rows_Columns_2() を実行すると、行数と列数が表示されます。

 

 今度はこのコードが「は~い。ちゅうも~く!」なのです。

Set myrange = Range("B2").CurrentRegion

 セル B2 を含むアクティブセル領域(データが入力されている範囲)を myrange というオブジェクト変数にぽいと放り込んでいます。オブジェクトを変数に入れるときは頭に Setステートメントが必要ですよ。これって意外に忘れがちなのです。こばとも初心者の頃に Set を忘れてて、
「このマクロ動かないじゃん!? VBA って欠陥言語じゃん!?」
と一人で勝手にキレていました。皆さんも逆ギレしないように、ちゃんと Set をつけてくださいな。え? そんなことでキレるのはこばとだけ? そうかなあ。


 

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)