1. はじめに
Excel VBAにおけるCells
は、ワークシート上のセルを参照するための非常に基本的で重要なオブジェクトです。Cells
は「セル全体を表すコレクション」ではなく、セルを指定するためのプロパティとして機能します。
Cells
を使うと、行番号と列番号でセルを指定できるため、ループ処理や動的なセル操作に便利です。
2. Cellsとは何か?
Cells
は、Worksheet
オブジェクトのプロパティであり、セルを指定するために用いられます。Cells(row, column)
の形式で指定し、特定のセルを参照できます。row
とcolumn
は共に数値で指定し、行番号・列番号を表します(1始まり)。Cells
は単一のセルを表すこともできますし、範囲を表すこともできます(複数セルを範囲として指定した場合)。
3. Cellsの使い方の基本
3-1. 単一セルの参照
Sub セル参照例()
' A1セルを指定(1行1列)
Cells(1, 1).Value = "こんにちは"
' B2セルを指定(2行2列)
Cells(2, 2).Value = 100
End Sub
Cells(1, 1)
はセルA1、Cells(2, 2)
はセルB2を指します。- 列番号は数字で表すため、列Aは1、Bは2、Cは3…となります。
3-2. 複数セルの範囲指定
Sub 範囲指定例()
' 1行1列から3行2列までの範囲(A1:B3)
Range(Cells(1, 1), Cells(3, 2)).Interior.Color = RGB(255, 255, 0)
End Sub
Range
の引数にCells
を組み合わせて、動的な範囲指定ができます。- これはループや変数を使って範囲を変えるときに便利。
4. CellsとRangeの違い
Cells
は基本的に「1つのセルを指定するため」のプロパティだが、開始セルと終了セルを組み合わせて範囲を作ることができる。Range
はセルの範囲を表すオブジェクトで、文字列で範囲を指定できる(例:”A1:B3″)。Cells
は行・列番号の動的指定に向き、Range
は固定範囲の指定に向いていることが多い。
5. Cellsを使ったループ処理の例
Excel VBAでよく使われるパターンの一つは、Cells
を使ったループ処理です。
5-1. 1列目の1〜10行目に値を入力
Sub ループ処理例()
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i * 10
Next i
End Sub
Cells(i, 1)
で1列目のi行目を指定。- ループ変数iに応じてセルを動的に指定し、値を設定。
5-2. 複数行列の二重ループ
Sub 二重ループで値設定()
Dim r As Integer, c As Integer
For r = 1 To 5
For c = 1 To 3
Cells(r, c).Value = r * c
Next c
Next r
End Sub
- 5行3列の範囲に掛け算の結果を入れる例。
6. Cellsを使った動的範囲の扱い
Cells
は動的にセル位置を決めたいときに特に重宝します。
6-1. 最終行を使った処理
Sub 最終行までループ()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Long
For i = 1 To lastRow
Cells(i, 1).Value = "データ" & i
Next i
End Sub
Cells(Rows.Count, 1)
は最終行の1列目(例えば1048576行目)を指す。.End(xlUp)
でその列の最後のデータがあるセルを取得。- 最終行を変数にしてループ範囲を動的に設定。
7. Cellsの応用例
7-1. 列番号を変数で指定
Sub 列番号を変数で操作()
Dim colNum As Integer
colNum = 3 ' C列
Cells(1, colNum).Value = "ヘッダー"
End Sub
- 列番号を変数に代入して柔軟にセル操作可能。
7-2. 列番号を列文字に変換せず使うメリット
- 列番号は数字なので計算や加算が容易。
- 文字列の列名を変換する必要がないためコードがシンプル。
8. 注意点とエラー回避
Cells
を使う場合は、どのWorksheet
のセルかを明確に指定しないと、アクティブシートのセルを参照してしまうので注意。
Sub ワークシート指定()
Worksheets("Sheet1").Cells(1, 1).Value = "指定セル"
End Sub
- 行番号・列番号は1以上の整数で指定し、0やマイナスはエラーになる。
9. Cellsを使った範囲の動的指定の応用
9-1. 範囲のサイズを変数で指定
Sub 動的範囲塗りつぶし()
Dim r As Long, c As Long
r = 10
c = 5
Range(Cells(1, 1), Cells(r, c)).Interior.Color = RGB(200, 200, 255)
End Sub
- 行数や列数を変数にして処理範囲を動的に変えられる。
10. Cellsでのセル参照の省略形
- ワークシート内で
Cells
を単独で使うと、暗黙的にActiveSheet.Cells
と同じ意味。 - 複数シートを操作する際は明示的に
Worksheet
を指定するのがベター。
11. まとめ
項目 | 内容 |
---|---|
Cells | 行番号・列番号でセルを指定するためのプロパティ |
形式 | Cells(row, column) で1始まりの数字で指定 |
単一セルの参照 | 例:Cells(3, 2) はB3セル |
複数セルの範囲指定 | 例:Range(Cells(1,1), Cells(3,3)) はA1:C3 |
ループとの親和性 | 動的なセル操作やループ処理に適している |
ワークシート指定 | Worksheets("Sheet1").Cells(1,1) で特定シートのセルを指定 |
注意点 | 範囲外の行列指定はエラー、明示的なシート指定推奨 |