Excel VBAでセルを操作する際に欠かせないのがVBA Cellsプロパティです。セルに値を入力したり、範囲を指定してデータを処理したりする場合に非常に便利な機能で、Rangeとの違いを理解することで、より柔軟なプログラムを組むことができます。この記事では、VBA Cellsの使い方とRangeとの違いを初心者向けにわかりやすく解説し、変数指定を使った応用例まで紹介します。
VBAのCellsとは?|セルを指定・操作する基本プロパティ
Cellsは、行番号と列番号を使ってセルを指定するためのプロパティです。構文は以下の通りです。
Cells(行番号, 列番号)
たとえば、A1セルを指定したい場合は次のように書きます。
Cells(1, 1).Select
Rangeとの違いをわかりやすく比較
| 項目 | Cells | Range |
|---|---|---|
| 指定方法 | 行番号・列番号で指定 | アドレス(”A1″など)で指定 |
| 主な用途 | ループ処理・動的参照 | 固定範囲の操作 |
| 例 | Cells(2,3) → C2 | Range(“C2”) |
Rangeは固定された範囲を指定するのに向いており、Cellsはループや変数を使う処理に最適です。詳しい違いは、VBAのCellsプロパティの解説でも確認できます。
Cellsでセルを指定する基本的な書き方
セルは「行番号 × 列番号」で指定します。
- Cells(1, 1) → A1
- Cells(3, 2) → B3
- Cells(5, 5) → E5
Cellsを使ったシンプルな例
Sub SampleCells()
Cells(1, 1).Value = "Hello"
Cells(2, 3).Value = 123
End Sub
このコードでは、A1に「Hello」、C2に「123」を入力します。
変数を使って動的にセルを指定する方法
行や列番号を変数で指定することで、柔軟にセルを操作できます。
Sub DynamicCells()
Dim rowNum As Integer
Dim colNum As Integer
rowNum = 3
colNum = 2
Cells(rowNum, colNum).Value = "テスト"
End Sub
ループでの自動入力例
Sub LoopExample()
Dim i As Integer
For i = 1 To 5
Cells(i, 1).Value = i
Next i
End Sub
A1からA5に「1~5」の数字を自動で入力します。
RangeとCellsを組み合わせてセルを指定する方法
範囲内で特定のセルを操作する場合、RangeとCellsを組み合わせて指定します。
Sub RangeCellsExample()
Range("A1:C3").Cells(2, 2).Value = "中央セル"
End Sub
このコードでは、A1:C3の範囲の中で2行2列目=B2を指定しています。
範囲操作の応用例
Range("A1:C3").Cells(3, 1).Font.Bold = True
この書き方でA3セルの文字を太字にします。Cellsは単一セルを返すRangeオブジェクトなので、Range(“A1”)とCells(1,1)は同じ意味です。
Rangeの引数にCellsを使う応用テクニック
Sub RangeWithCells()
Range(Cells(1, 1), Cells(3, 3)).Select
End Sub
A1からC3までの範囲を選択します。開始・終了セルを変数化することで動的な範囲指定も可能です。
実践的な自動範囲選択
Sub AutoRangeSelect()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(lastRow, 3)).Select
End Sub
A列の最終行までを自動で範囲選択します。可変データに最適です。
Cellsが返すRangeオブジェクトの活用法
- Valueプロパティ: 値の取得・代入
- Copy・Clear・Selectメソッド: コピーや削除、選択操作
- Range変数への代入: 再利用や書式変更に便利
例:
Sub ObjectReuse()
Dim c As Range
Set c = Cells(2, 2)
c.Value = "再利用セル"
c.Font.Bold = True
End Sub
よくあるエラーと対処法
- RangeクラスのSelectメソッドが失敗: シートを明示的に指定して解決。
Worksheets("Sheet1").Cells(1,1).Select - Permission denied: 権限不足。
sudo相当の管理者権限は存在しないためVBAではシート指定で対応。 - 行・列番号の範囲外指定: ループ処理ではIf文で範囲を制御。
まとめ|Cellsを使いこなして効率的にセルを操作しよう
VBA Cellsは、行番号・列番号を使ってセルを自在に操作できる便利なプロパティです。固定範囲のRangeと異なり、動的処理やループ処理に強みがあります。Cellsを理解すれば、Excelの自動化が一気に効率化します。
参考リンク一覧:
- 【VBA入門】Cellsでセルを指定(Rangeとの使い分けも解説)
- VBAのCellsプロパティ | ExcelのVBA入門
- 【VBA Cells】セルの範囲を指定する方法・応用例を解説


