拙著『いちばんやさしいExcel VBAの教本』の、Lesson 63「行全体・列全体を表すRangeオブジェクトについて学習しましょう」に、
上図のような吹き出しがあります。
Rangeプロパティで取得したRangeオブジェクトと、RowsプロパティやColumnsプロパティで取得したRangeオブジェクトとは違うことに、少しだけ言及している吹き出しです。
入門書という立場上、これ以上の深入りは避けましたが、将来Rangeオブジェクトについて正しく理解するときのために、コードの具体例とともに補足しておきます。
選択するだけならRangeとRows・Columnsは同じ
件の吹き出しに
『Rangeプロパティを使った「Range("1:2")」「Range("A:B")」のような記述でも、行全体・列全体のRangeオブジェクトを取得できるように見えますが...』
と書いたとおり、RangeオブジェクトのSelectメソッドを使って選択する場合には、RangeプロパティでもRowsプロパティでも同じ結果となります。
Range("1:2").Select
End Sub Sub Rowsプロパティで行を選択するサンプルマクロ()
Rows("1:2").Select
End Sub
上記2つのSubプロシージャどちらでも、アクティブシートの1:2行目を選択できます。
同様に、Range("A:B").Selectでも、Columns("A:B").SelectでもA:B列を選択できます。
取得できる単独のRangeオブジェクトの数はRangeとRows・Columnsではまったく違う
件の吹き出しに
『Countプロパティの返す値が変化するなど、厳密には違いがあります。』
と書いたとおり、RangeオブジェクトのCountプロパティで取得できる数はまったく異なります。
MsgBox Range("1:2").Count
End Sub Sub Rowsプロパティで取得したRangeの数を取得するサンプルマクロ()
MsgBox Rows("1:2").Count
End Sub
Range("1:2").Countでは「32768」が返されるのに対し、
Rows("1:2").Countでは「2」が返されます。
最近のExcelのワークシートは、16384列×1048576行で構成されています。
Range("1:2").Countで返される「32768」は、列数「16384」の2行分です。
つまりRange("1:2")で取得できるRangeオブジェクトは、下図のように個々のセルを表すRangeを単独のオブジェクトとして持つ、コレクションとしてのRangeオブジェクトで、
Rows("1:2")で取得できるRangeオブジェクトは、下図のように1つの行全体を表すRangeを単独のオブジェクトとして持つ、コレクションとしてのRangeオブジェクトです。
- Newer:ウォッチ式の追加をドラッグアンドドロップで
- Older:TODAY関数をキーボード入力する
Home » いちばんやさしいExcel VBAの教本 » Rangeで取得したRangeとRowsやColumnsで取得したRangeの違い