VBAでセルを指定する方法は主に2つあります。Cells と Range です。どちらも同じセルを指定できますが、使い分けることで繰り返し処理や動的な列指定がしやすくなります。
この記事では、Cells と Range の違いと使い分けを解説します。
Cellsでセルを指定するには?
Cells(行番号, 列番号) の形式で指定します。列はA=1・B=2…という数値で表します。
' A2セルに「テスト」と入力
Cells(2, 1).Value = "テスト"
' C5セルの値を取得
Dim val As String
val = Cells(5, 3).Value
普段Excelで「A2」のように「列→行」で読んでいるのに対し、Cellsでは「行→列」の順になります。A2は「2行目の1列目」なので Cells(2, 1) です。
Cells の最大の強みは、行番号・列番号を変数で動的に指定できる点です。
' For〜Nextで列を動的に変えながら処理する
For j = 1 To 5
Cells(1, j).Value = j ' A1〜E1に1〜5を入力
Next j
Rangeでセルを指定するには?
Range("A2") のようにアルファベットの列名をそのまま使います。Excelの表示に慣れている方には直感的でわかりやすい書き方です。
' A2セルに値を入力
Range("A2").Value = "テスト"
' A1〜A10の範囲をまとめてクリア
Range("A1:A10").ClearContents
Range は複数のセル範囲をひとまとめに指定できます。Range("A1:D10") のように :(コロン)でつないで範囲指定するのが主な使い方です。
CellsとRangeの使い分けとは?
| 場面 | 向いている方法 |
|---|---|
| 繰り返し処理で行・列を変えながら処理する | Cells(i, j) |
| 特定のセルを1つ指定する | どちらでも可 |
| 複数セルの範囲をまとめて操作する | Range("A1:D10") |
| 視覚的にわかりやすく書きたい | Range("A2") |
基本的には Cells を覚えておくと、繰り返し処理との組み合わせで応用が広がります。
まとめ
Cells(行, 列):数値で行・列を指定。変数と組み合わせた動的処理に強いRange("A2"):列名で指定。視覚的でわかりやすいが変数での動的指定には不向きRange("A1:D10"):範囲指定にはRangeが便利- 繰り返し処理で行・列を動かす場面は
Cellsを使うのがおすすめ - 指定の順序は
Cells(行, 列)。A2はCells(2, 1)
よくある質問
CellsとRangeを混在させてもいいですか?
問題ありません。たとえば Range(Cells(1,1), Cells(10,4)) のようにCellsでRangeの範囲を動的に指定する書き方もよく使われます。
列番号がわからない場合はどうすればいいですか?
A列=1、B列=2…とアルファベット順の番号になります。「AA列」のような2文字列は27から始まります。また Range("C1").Column で列番号を取得する方法も使えます。
シートを指定してCellsを使うにはどう書きますか?
Worksheets("シート名").Cells(2, 1).Value のようにシートを前に付けて書きます。シートを省略するとアクティブシートが対象になるため、意図した動作のためにはシートを明示するのが安全です。
Range(“A1”)とCells(1,1)は完全に同じですか?
同じセルを指定していますが、返すオブジェクトの型が若干異なります。実務上はほぼ同じように使えますが、一部のメソッドで挙動が違う場合があります。迷ったら Cells を基本にしておくと安心です。
ActiveCellを使えばいいケースはどんな場合ですか?
ユーザーが選んだセルに対して操作したい場合に使えます。ただし選択状態に依存するため、自動実行するマクロでは Cells や Range で明示的に指定するのが安全です。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



