今回からついに、自分の手でコードを書いていく「基礎編」が始まります。
「CellsとRangeの2種類って使い分けあるの?」
「VBAでセルを操作する方法を知りたい!」
この使い分けで混乱し、「プログラミングってやっぱり難しい…」と挫折してしまいます。
結論から言います。本連載ではCellsは一切使いません。
「Rangeのみ」で進めます!
なぜなら、「手作業を思い浮かべながらコーディングする」を実現するために
Rangeは最高のパートナーだからです。
この記事を読み終える頃には、あなたの脳内のマウス操作が、そのままVBAのコードに変換される快感を味わえるはずですよ!

なぜ「Cells」ではなく「Range」なのか?
セルA1の表現方法
・Cellsの表現 :Cells( 1 , 1 )
・Rangeの表現:Range(“A1”)
「Cells(1, 1)」という書き方は、コンピュータにとっては都合が良いです。
しかし、Cellsは手作業を自動化したい私たちにとっては不自然です。

※「Sub 〜 End Sub」が1つのマクロを意味します。
私たちがエクセルで作業する時、頭の中でどう考えているか思い出してみてください。
- 「A1セルに名前を入力しよう」
- 「B列を全部コピーしよう」
- 「A1からC10までを黄色く塗ろう」
このように、常にセル番地で考えていますよね?
Rangeはこの「A1」という言葉をそのままコードに使えるからすぐにイメージできます。
「手作業のイメージ」と「VBAのコード」が1ミリもズレることなく直結するのです。

パッとイメージできるRangeだけで十分!
僕もこれしか使わないけど
困ったことは全くないよ!
基本形:Range(”セル番地”)
VBAで「A1セル」を指し示すルールは、驚くほどシンプルです。
Range("A1")
- Range と書く(「範囲」という意味)。
- セルの住所を ” “(ダブルクォーテーション) で囲み、( )(カッコ) で包む。
” “(ダブルクォーテーション)で囲まれたものは文字列として認識されます。
Rangeの()内にはセル番地を文字列で入力する必要があります。
” “(ダブルクォーテーション)や( )を忘れたり、Rangeのスペルミスで
エラーが発生します。

分かっていても意外と「” “」忘れのエラーは多いよ。
多いと分かっていれば気づける!
手作業をスロー再生!「分解した手作業」をコードに変える
では、心得にある「手作業をスロー再生して言語化」をやってみましょう。
【例:A1セルに「100」と入力する】
- 手作業の分解:
- 「A1セル」をターゲットに決めて……
- そのセルの「値(中身)」を……
- 「100」に変える!
- VBAなら、この実況をそのまま書くだけ:
Range("A1").Value = 100

このコードの「.(ドット)」は、日本語の「〜の」と訳すと完璧です。
「Range(“A1”)(A1セル)の・Value(値)を・100にする」。

僕たちが1つ1つ手作業するのと同じで
VBAも1つ1つの手順が必要なんだ。
どうですか?
「マウスを動かし、キーボードを叩く」一連の動作が、1行に凝縮されました。
範囲指定も「マウスの動き」そのまま!
複数のセルをまとめて操作したい時も、Rangeならマウスをドラッグする感覚で書けます。
- 範囲をまとめて指定(A1からC5まで):
Range("A1:C5").Select
(エクセル関数と同じ:を使うだけ!) - 離れたセルを同時に指定(A1とC1とE1):
Range("A1, C1, E1").Select
(Ctrlキーを押しながらクリックする感覚を,で表現!)

関数と同じように「:(コロン)」を使うと、範囲指定できます。
【実務比較】
- 手作業: 大量のデータ範囲をマウスで慎重に選択……
- VBA:
Range("A:A").Selectと書くだけで、100万行あるA列すべてを一瞬で掴み取ります。

僕たちが1つ1つ手作業するのと同じで
VBAも1つ1つの手順が必要なんだ。
「Cells」は不要!変数だって「Range」で自由に操れる
「Cellsを使わないと、場所を自由に変えるような複雑な動きはできないのでは?」
と心配する方がいるかもしれません。
いいえ、そんなことはありません。
Rangeと「変数(入れ物)」を組み合わせれば、場所を動かすことは驚くほど簡単にできます。
たとえば、i という変数(中身が数字などでコロコロ変わる箱)に「5」という数字が入っているとき、A5セルを指定したいなら、こう書くだけです。
Range("A" & i)
これは、「文字の A」と「数字の i (5)」を「&(アンド)」でガッチャンコ!と繋げているだけです。

変数については今後解説するよ!
セル範囲を変数で移動させることは
利用頻度が高いから、解説回でしっかり抑えよう!
今は「こんなものがあるんだ」でいいよ。
補足:他人のコードに出てくる「Cells」に惑わされないで!
今後、ネットでマクロを検索すると、Cells(1, 1) という書き方に出会うかもしれません。
これは「1行目の1列目」という風に、場所を数字で数える方法です。
Rangeの方が圧倒的に分かりやすく、初心者向けです。
もし今後VBA以外のプログラミング言語を利用するならCellsに慣れるべきでしょう。
しかし、現時点ではエクセルを最大限活かせるようになるべきです。
よって、Rangeだけ学習しましょう!
もしネット検索でCellsを見かけたら「Cellsはセルのこと、それ以外のコードが分かれば自分に活用できるな」と自信を持ってスルーしてください。

僕も最初のうちは戸惑ったんだ。
Cellsを無理やり使ってコーディングしてた頃もあるけど
Cellsじゃないと困るって場面がないと気づいてからはRange一択!
初めての「身代わりロボット」を動かそう!
標準モジュールに、以下の「実況中継コード」を書き込んでみてください。

マクロがどんなものかを体感しよう!
「どの行が何をしているか」だけ
をなんとなく理解しよう!
完璧な理解はしなくて良いからね。
Sub 私の初マクロ()
Dim i As Integer ' 変数の準備(今は呪文だと思ってOK!)
i = 5 ' 変数に「5」を入れる
' A1セルに実況どおり入力
Range("A1").Value = "VBA成功!"
' 変数を使って「A5」セルを指さし、色を塗る!
Range("A" & i).Interior.Color = vbYellow
' 完了の合図
MsgBox "身代わりロボットが作業を終えました!"
End Sub
[F5]キーを叩いて、エクセル画面を確認しましょう。
「手作業のイメージ」が「コード」になり、それが「実際の動き」として現れる。
この感覚を掴めれば、あなたはもうVBAプログラマーの仲間入りです!
今回のクエストを終えて
- 手作業のイメージと直結する「Range」が最強!
- 命令は「どこの(Range)」「何を(Value)」「どうする(= 100)」の順。
- 「.(ドット)」は日本語の「〜の」。
- 変数を使うときも
Range("A" & i)の形で自由自在。 - Cellsは今のあなたを混乱させるだけ。見かけてもスルー!
次回は、この「.(ドット)」の後に続く言葉たちのルール、「VBAの文法(オブジェクト・プロパティ・メソッド)」を攻略します。
文法と聞くと難しそうですが、実は「名詞と動詞」の関係を知るだけ。
ここを理解すると、マクロの命令が「主語+述語」の文章に見えてきますよ!






コメント