Excel VBA | Range と Cells の使い分け早見表(完全版)

VBA
スポンサーリンク

Range と Cells の使い分け早見表を、初心者でも一瞬で判断できるように超分かりやすくまとめます。


まず最初の結論(覚えやすい)

  • 固定のセルを扱う → Range
  • 動くセル(行番号や列番号が変わる)を扱う → Cells

早見表(一覧)

やりたいことRangeCells説明
A1 など固定セルを指定したいA1Range(“A1”) のほうが読みやすく短い
複数の固定セルを指定したいA1:C10Range(“A1:C10”) が一番見やすい
行番号をループで変えたい行1〜10Cells(i, 1) のほうが圧倒的に簡単
列番号をループで変えたいA列→B列Range(“A” & i) は面倒
行・列両方が変化するマス目処理Cells を使うと簡単に 2次元処理できる
位置を数値で扱いたい数字で計算行列番号を足す引くがしやすい
動的な範囲を作りたい最終行までRange(Cells(〜), Cells(〜)) の形が最強
コード可読性(人が見て分かりやすい)Range(“A1”) のほうが自然
他の人が読んでも理解しやすい文字で位置が明確
実務でよく使うシーンデータの行処理ループは Cells がほぼ必須

初心者向け「これだけ覚えればOK」版

Range を使う場面

  • A1 など「固定の場所」を触る
  • A1:C10 など「決まった範囲」を触る
  • 人に見てすぐ分かるコードを書きたい時

📝 例

Range("A1").Value = "OK"
Range("A1:C10").Interior.Color = vbYellow
VB

Cells を使う場面

  • 行・列が 動く
  • i 行目、j 列目のように 変数を使う
  • ループで処理をする
  • 最終行や最終列まで自動処理したい
  • 動的に範囲を作りたい

📝 例

Cells(i, 2).Value = i
Range(Cells(2,1), Cells(lastRow, 3)).ClearContents
VB

Range と Cells の「組み合わせ技」

実務で一番よく使うパターン

Range(Cells(2, 1), Cells(lastRow, 3)).Select
VB

これは

  • 2行1列(A2)から
  • 最終行3列(C最終行)まで

という 動的な範囲を生成できます。

Range だけでは書きにくいので、Cells とセットで使うのが定石。


よくあるミス(初心者が引っかかるポイント)

❌ 行と列を逆にしてしまう

Cells(列, 行) ではありません!

正しくは:

Cells( , )


❌ Range(“A” & i) を使ってしまう

間違いではないが、列が変わると途端に難しくなる。

例えば

Range(Chr(64 + j) & i)
VB

のような「アルファベット操作」が必要。
Cells を使えば:

Cells(i, j)
VB

で終わる。


❌ 動的範囲に Range(“A1”, “A” & lastRow”) と書く

これも間違いではないが 列が変わると破綻する。

→ 正解は Cells を使う

Range(Cells(1, 1), Cells(lastRow, 1))
VB

最後に:プロはどう使い分けている?

プロはこう使います:

  • 固定セル → Range
  • 動くセル → Cells
  • 範囲全体 → Range
  • 動的範囲 → Range + Cells の合わせ技

例:

Range("A1").Value = "ヘッダー"
Cells(i, 2).Value = "データ"
Range(Cells(2, 1), Cells(lastRow, 5)).ClearContents
VB

これが実務で最も頻出する黄金パターンです。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました