VBA入門者の”どっち?”・・・CellsorRange−Cellsでしかできないこと
■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

Excel97,2000



戻る


Excel Word Access VBA! モーグ