HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > セル範囲を参照する2(Cellsプロパティ)

即効テクニック

セル操作関連のテクニック

セル範囲を参照する2(Cellsプロパティ)

(Excel 2000)
単体のセルを表す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プロパティを使用してください。