Step1 基礎

【基礎5-3】実践的まとめ③

RangeとCells

ステップ1基礎でもう少し伝えておきたいことがあります。

VBAでプログラムを書くうえで一番よく使うであろうRangeとCellsについて、
プロパティとオブジェクトの観点で少し追加で説明します。

使う上で、あまり神経質になる必要はありませんが、CellsとRangeを適当に使うとプログラムが読みにくかったり、不具合の原因になったりします。

ちなみにCellsというオブジェクトは存在しません
CellsはプロパティでありRangeを返します。

どういう意味かわかりますか?

Worksheets(“Sheet1”).Cells(1,1).Value

これは「アクティブなブックのSheet1のA1セルの値」を示します。

Worksheets(“Sheet1”)でSheet1のWorksheetオブジェクトを取得します。
次にWorksheetオブジェクトのプロパティであるCells(1,1)でA1セルのオブジェクトを取得します。
その時に、取得するオブジェクトはRangeオブジェクトなのです。

つまり、Range(“A1”)とCells(1,1)は別の書き方ですが、共にA1セルのRangeオブジェクトを返すということになります。

ちなみにCellsのようにRangeを返す動きをするものは他にもあります。
行を示すRows、列を示すColumnsなどがRangeを返します。

Rows <行>

Rows(1)は1行目を示すのですが、

Worksheets(“Sheet1”).Rows(1)

は、「Sheet1の1行目」を示しています。

Worksheets(“Sheet1”)でSheet1のWorksheetオブジェクトを取得します。
WorksheetオブジェクトのプロパティであるRows(1)で1行目のオブジェクトを取得します。
その時に、取得するオブジェクトもCellsの時と同様Rangeオブジェクトなのです。

1行目をRangeで書くと、Range(“1:1”)となります。
Range(“1:1”)も1行目を示しますが、Rows(1)の方が英語Rowsを使っているので、行を示すには分かりやすいですよね。

Columns <列>

1列目をRangeで書くとRange(“A:A”)となります。
Range(“A:A”)は1列目を示しますが、Columns(1) or Columns(“A”)の方が、列を示すには分かりやすいですよね。

Rowsと同様に、WorksheetオブジェクトのプロパティであるColumns(1)で1行目のオブジェクトを取得します。
その時に、取得するオブジェクトもCellsの時と同様Rangeオブジェクトなのです。

まとめ

言葉が複雑そうに見えますが、言いたいことはシンプルです。

これまでと同様、プロパティを使ってオブジェクトを取得する。

これだけを言っているにすぎません。
プロパティを使った際に取得するオブジェクトが異なることがあるということです。
このことを知識として覚えておきましょう。