RangeプロパティとCellsプロパティの違いについて質問をいただきました。
VBAでExcelを操作するにあたっては、セルやセル範囲をどのように扱うかが重要なポイントになります。
ExcelVBAでは、セルやセル範囲はRangeオブジェクトとして表されます。
Rangeオブジェクトを取得する方法はいろいろとありますが、なかでもよく使われるのがRangeプロパティとCellsプロパティです。
どちらも指定したセルのオブジェクトを扱えます。
Rangeプロパティの書式は、
Range(セル番地)
のように、文字列でセル番地を指定します。
Cellsプロパティの書式は
Cells(行、列)
であるように、セルの指定方法は[行]と[列」で指定します。
[行]と[列]には数値を指定します。
[行]と[列」を指定することで、目的のセルのオブジェクトを扱えるのです。
この点がCellsプロパティの特徴であり、文字列でセル番地を指定するRangeプロパティとの大きな違いです。
[行]は、ワークシートの行番号と同じ数値を指定します。
[列]は、ワークシートの列番号「A」を「1」とする数値で指定します。
したがって、C列なら「3」になります。よってC4セルは、「Cells(4,3)」と記述することになります。
また、Cellsプロパティは変数も使えます。そのため、Cellsプロパティを用いれば、行や列の指定にループのカウンタ変数を使って、複数のセルに対して同じような処理を繰り返し実行できるのです。
さらに、Cellsプロパティは、指定したオブジェクトを基点として、そこから相対的に行と列を指定することでセルを指定することもできます。
書式は
オブジェクト名.Cells(行、列)
例:
B3セルを基点とし、そこから3行、2列離れたセルを指定するとします。
B3セルのオブジェクトは「Range(”B3")ですから、次のように記述します。
Range("B3").Cells(3,2)
このように記述すると、B3セルから見た3行目、2列目のセルということで、C5セルを示すことになります。
なお、Cellsプロパティは基点となるオブジェクトの記述を省略することができます。
省略すると、自動的に現在のワークシートのA1セルが基点となります。
Cellsプロパティで注意する点は、セル範囲は指定できないことです。単一のセルか、ワークシート上のセルすべてしか指定できません。
RangeオブジェクトとCellsプロパティの両者の違い、得意/不得意を把握し、目的に応じて使い分けてください。
さらに、VBAではほかにも行/列を数値または変数で指定できる方法として「Offset」プロパティ」が用意されています。
これは、アクティブセルから相対的にセル番地を返します。
書式は
基点となるオブジェクト.Offset(行方向への移動,列方向への移動)
「行列方向への移動」は数値で指定します。
ただし、行列の指定で注意しなければならないのが、基点セルが「0」になることです。
これらを使って、「E4」セルから「E8」にかけてセルの値をクリアし、文字の色を黒に設定するというプロシージャを記述すると以下のようになります。
Cellsプロパティを使って記述すると、次のようになります。
Sub サンプル1()
For i = 4 To 8
Cells(i, 5).ClearContents
Cells(i, 5).Font.Color = vbBlack
Next i
End Sub
__________________________________________
「E4」セルを基点としてCellsプロパティを用いて記述すると、次のようになります。
Sub サンプル2()
For i = 4 To 8
Range("E4").Cells(i, 1).ClearContents
Range("E4").Cells(i, 1).Font.Color = vbBlack
Next i
End Sub
___________________________________________
「サンプル1」をCellsプロパティではなく、Offsetプロパティで記述すると次のようになります。
Sub サンプル3()
For i = 4 To 8
Range("E4").Offset(i, 0).ClearContents
Range("E4").Offset(i, 0).Font.Color.vbBlack
Next i
End Sub
___________________________________________
Rangeオブジェクトでも記述できます。
Sub サンプル4()
For i = 4 To 8
Range("E" & i).ClearContents
Range("E" & i).Font.Color = vbBlack
Next i
End Sub
このようにVBAでは、同じ機能を実現するのに複数の方法が使えるケースがあります。
コードの見やすさや後々の仕様の追加・変更への対応のしやすさなどを考慮して選びましょう。
よろしかったら・・・応援クリック・・・お願いします。励みになります。