Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Excelマクロ入門】Range と Cells の違いを解説!初心者が最初に迷うポイント No.1

Excel VBA を始めた初心者さんが、
ほぼ100%つまずくポイントがあります。

それが――
「Range と Cells の違いって何?」

コードを書いていると、

  • どっちを使えばいいの?

  • 同じようにセルを指定してるように見える…

  • Range("A1") と Cells(1,1) って結局同じなの?

と悩みがちです。

でも大丈夫。
この記事でスッキリ理解できます✨


■ Range と Cells は “セルの指定方法” が違うだけ

結論から言うと、Range と Cells は
「セルを指定する書き方の違い」です。


◆ Range:文字で指定する(人間に優しい)

 
 
Range("A1")
Range("B2:D5")
Range("A:A")
Range("1:1")
 

Range は、Excel の見たまんまの書き方で指定します。
直感的で覚えやすいのがメリット。


◆ Cells:数字で指定する(マクロに優しい)

 
 
Cells(1, 1)  ' A1
Cells(2, 3)  ' C2
Cells(5, 1)  ' A5
 

Cells(row, column) という形で
「行番号・列番号で指定」します。

列番号が数字なので、ループとの相性が抜群です。


■ 例:同じセルを Range と Cells で比較

指定 意味
Range("A1") A1セル
Cells(1,1) A1セル

はい、こうして見ると “同じセル” です。

  • Range:文字(A1)

  • Cells:数字(1,1)

ただ違うのはこの部分だけ。


■ ループでは Cells が圧倒的に便利

例えば、1行目に1〜10の数字を入れる場合:

Range だと大変…

 
 
Range("A1").Value = 1
Range("B1").Value = 2
Range("C1").Value = 3
' ……終わらない
 

Cells なら超スマート!

 
 
For i = 1 To 10
    Cells(1, i).Value = i
Next i
 

このため多くの VBA プログラマー
ループや自動処理では Cells をメインで使います。


■ Range と Cells を組み合わせることもできる

実務では、Range(Cells(), Cells()) の形がよく使われます。

例:A1〜D5 の範囲を指定する

 
 
Range(Cells(1,1), Cells(5,4)).Select
 

つまり、

  • 開始セル(A1)

  • 終了セル(D5)

を “Cells で数字指定している” という使い方です。

ループと組み合わせると最強になります。


■ 大事な注意:Cells の省略は危険

初心者のつまずきポイントがこれ。

 
 
Cells(1,1).Value = "Test"
 

一見普通に見えますが、
どのシートの Cells か? は明確になっていません。

そのため、意図しないシートに書き込まれることがあります。

それを防ぐためにはシートを明記する

 
 
Worksheets("Sheet1").Cells(1,1).Value = "Test"
 

Range も同じです👇

 
 
Worksheets("Sheet1").Range("A1").Value = "Test"
 

■ Range が向いている場面・Cells が向いている場面

目的 Range Cells
固定セルを指定
表示のまま指定(A1, A:D など) ✕(不可能)
ループ処理
行番号/列番号で動的に指定
コードの読みやすさ重視

■ まとめ

  • Range → “A1” のように文字で指定する、人間が読みやすい

  • Cells → (行番号, 列番号) で指定する、マクロが扱いやすい

  • 同じセルでも書き方が違うだけ
    Range("A1")Cells(1,1)

  • ループや動的な処理は Cells が最強

  • シートを明記しないとトラブルの元!