「Range」だけでOK!セル操作をコードに変える

Level5 VBA・マクロ

今回からついに、自分の手でコードを書いていく「基礎編」が始まります。

「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")

  1. Range と書く(「範囲」という意味)。
  2. セルの住所を ” “(ダブルクォーテーション) で囲み、( )(カッコ) で包む。

” “(ダブルクォーテーション)で囲まれたものは文字列として認識されます。
Rangeの()内にはセル番地を文字列で入力する必要があります。

” “(ダブルクォーテーション)や( )を忘れたり、Rangeのスペルミスで
エラーが発生します。

たんたん
たんたん

分かっていても意外と「” “」忘れのエラーは多いよ。

多いと分かっていれば気づける!


手作業をスロー再生!「分解した手作業」をコードに変える

では、心得にある「手作業をスロー再生して言語化」をやってみましょう。

【例:A1セルに「100」と入力する】

  • 手作業の分解:
    1. 「A1セル」をターゲットに決めて……
    2. そのセルの「値(中身)」を……
    3. 「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の文法(オブジェクト・プロパティ・メソッド)」を攻略します。

文法と聞くと難しそうですが、実は「名詞と動詞」の関係を知るだけ。
ここを理解すると、マクロの命令が「主語+述語」の文章に見えてきますよ!

コメント

タイトルとURLをコピーしました