Home » いちばんやさしいExcel VBAの教本 » Rangeで取得したRangeとRowsやColumnsで取得したRangeの違い

Rangeで取得したRangeとRowsやColumnsで取得したRangeの違い

対象:Excel 2010, Excel 2013, Windows版Excel 2016

拙著『いちばんやさしいExcel VBAの教本』の、Lesson 63「行全体・列全体を表すRangeオブジェクトについて学習しましょう」に、

Rangeで取得したRangeとRows・Columnsで取得したRangeの違い

上図のような吹き出しがあります。

Rangeプロパティで取得したRangeオブジェクトと、RowsプロパティやColumnsプロパティで取得したRangeオブジェクトとは違うことに、少しだけ言及している吹き出しです。

入門書という立場上、これ以上の深入りは避けましたが、将来Rangeオブジェクトについて正しく理解するときのために、コードの具体例とともに補足しておきます。

選択するだけならRangeとRows・Columnsは同じ

件の吹き出しに
『Rangeプロパティを使った「Range("1:2")」「Range("A:B")」のような記述でも、行全体・列全体のRangeオブジェクトを取得できるように見えますが...』
と書いたとおり、RangeオブジェクトのSelectメソッドを使って選択する場合には、RangeプロパティでもRowsプロパティでも同じ結果となります。

Sub Rangeプロパティで行を選択するサンプルマクロ()
 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プロパティで取得できる数はまったく異なります。

Sub Rangeプロパティで取得したRangeの数を取得するサンプルマクロ()
 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オブジェクトで、

Rangeで取得したRangeとRows・Columnsで取得したRangeの違い

Rows("1:2")で取得できるRangeオブジェクトは、下図のように1つの行全体を表すRangeを単独のオブジェクトとして持つ、コレクションとしてのRangeオブジェクトです。

Rangeで取得したRangeとRows・Columnsで取得したRangeの違い

[スポンサードリンク]

Home » いちばんやさしいExcel VBAの教本 » Rangeで取得したRangeとRowsやColumnsで取得したRangeの違い

「いちばんやさしいExcel VBAの教本」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.