■Cellsでしかできないこと■
1.行列ともに変数を指定してセルを取得する
2.特定のセル範囲内で相対指定でセルを取得する
3.シート全体、あるいは特定のセル範囲全体をあらわす
○1.行列ともに変数を指定してセルを取得する○
Cellsプロパティーでは・・・
Cells(行インデックス、列インデックス)
というように、行列ともに数値指定できるためループ構造の中で行、あるいは列、また
あるいはその両方が変動する場合などにCellsが威力を発揮します。
下記の例ではセルA1からE10までの各セルにセルのアドレスを書き込みます。
Dim i As Integer, j As Integer
For i = 1 To 10
For j = 1 To 5
Cells(i, j).Value = Cells(i, j).Address
Next j
Next i
※セルにアドレスを書き込むだけならばFor Eachのループを使うほうが簡潔です
○2.特定のセル範囲内で相対指定でセルを取得する○
Cellsによるセルの指定は何もセルA1を基準としてインデックスを数えるとは限りません。
例えば、セルB2からF10の範囲内で2行3列目(D3)と指定するとすると・・・
Range("$B$2:$F$10").Cells(2, 3).Select
とか・・・
Dim Rng As Range
Set Rng = Range("$B$2:$F$10")
Rng.Cells(2, 3).Select
のように記述することができます。この場合も、行列のインデックス指定ができる特性から
、特定のセル範囲の中でのループ構造の中でつかうと効果的な場合もあります。
※正確にはRangeも相対指定で利用できます。
(例)Range("$D$1:$G$10").Range("A1").Select
はシート上のセルD1を選択します。しかし、このような記述方法はあまり一般的で
もありませんし、可読性の点からも避けるのが賢明といえます。
○3.シート全体、あるいは特定のセル範囲全体をあらわす○
シート全体のセルを取得するには、インデックスを指定せずにCellsを用います。
Cells.Clear 'シート全体の書式、値を消去します
Cells.EntireColumn.AutoFit 'シート全体の列幅を調整します
またあるは、セルB2からF20といったような特定のセル範囲を対象として使用すること
もできます。
’B2からF20までの範囲内にあるセルの個数を数えます
MsgBox Range("B2:F20").Cells.Count
|