セル範囲を参照する2(Cellsプロパティ)
 単体のセルを表すRangeオブジェクトを参照します。Objectにはワークシートを指定
します。Rangeプロパティと同じく、Objectの指定を省略したときにはアクティブシー
トが対象となります。Row、Colは、それぞれワークシートでの行、列の座標になります。


 構文  Object.Cells(Row, Col)     取得のみ

 設定項目        内容
  Object          Application,Worksheet,Rangeオブジェクト [省略可能]
  Row             対象セルの行を表す整数[省略可能]
  Col             対象セルの列を表す整数[省略可能]


 次のサンプルは引数を2つとも指定した場合の例です。

●サンプル1●

Sub CellsSamp1()
    Dim i As Integer

    '----変数iの値が1〜5の範囲で変化します
    For i = 1 To 5
        '----(1)Objectがシートの場合
        Cells(2, i).Value = i
        '----(2)ObjectがRangeの場合
        Range("A4:B5").Cells(i, i).Value = i * 100
    Next i
    Range("A4:B5").Select

End Sub


 (1)のステートメントではObjectを指定していませんから、対象はアクティブシートに
なります。2行目、i列のセルに対して、1から5までの値を入れていきます。(2)のステー
トメントでは、ObjectがRangeオブジェクトになっています。この場合、指定されたセル
範囲の左上のセル=A4の位置を基準に座標が振りなおされます。セル範囲の広さには影響
を受けません。サンプルで示したように、ループ処理の中で参照先セルを変えていくよう
な場合に便利です。


●注意●

 Row引数は1〜65,536、Col引数は1〜256までの値で設定しなくてはなりません。この理由
は、勿論、その範囲を超える番地にはセルが存在しないからです。もし、超えた値を指定
した場合にはエラーが発生します。


 引数を1つしか指定しない場合、A1から列方向にインデックスが振られます。

●サンプル2●

Sub CellsSamp2()

    Cells(256 * 0 + 1) = 1
    '----256で1行目終わり、2行目へ
    Cells(256 * 1 + 2) = 2
    '----256×2で2行目終わり、3行目へ
    Cells(256 * 2 + 3) = 3

End Sub


 上記のサンプルを実行すれば、列方向に順に参照していっていることがわかります。なお、
ObjectにRangeオブジェクトを指定した場合の動作は、引数を2つ指定した時とは異なります
ので注意が必要です。次のサンプルを見てください。

●サンプル3●

Sub CellsSamp3()

    Dim i As Integer

    '----変数iの値が1〜10の範囲で変化します
    For i = 1 To 10
       '----A1〜B3の列数=2
       Range("A1:B3").Cells(i).Value = i
    Next
    Range("A1:B3").Select

End Sub


 実行結果を見ればわかりますが、指定したRangeオブジェクトの列数をキーにして、イン
デックスを振っています。
 また、Rangeプロパティとの組み合わせで、両プロパティの特徴を活かしたプログラミン
グが可能です。


●サンプル4●

Sub CellsSamp4()

    Dim i As Integer

    i = 5
    Range(Cells(1, 1), Cells(i, i)).Value = "ABC"

End Sub


 変数iの値に応じて、セルA1と変数iで指定されるセルに囲まれたセル範囲に"ABC"と
いう値を入力しています。なお、アクティブシート以外を対象にこのような処理を記述
する場合には、注意が必要です。例えば、"ABC"の入力先がアクティブでない"Sheet3"で
ある場合、次のステートメントではエラーとなります。

    Worksheets("Sheet3").Range(Cells(1, 1), Cells(i, i)).Value = "ABC"

 意図した動作にするには、次のように記述します。Cellsプロパティの前に「.」がつ
いていることに注目してください。

    With Worksheets("Sheet3")
        .Range(.Cells(1, 1), .Cells(i, i)).Value = "ABC"
    End With

 このように記述することで、Cellsプロパティは"Sheet3"を参照するようになります。


●ポイント●

 引数に何も指定しない場合、Objectがワークシートの時には、ワークシートの全セル
を参照します。シートの全てのセルを対象に操作をしたい場合には、Rangeプロパティ
ではなくCellsプロパティを使用してください。

Excel2000



戻る


Excel Word Access VBA! モーグ