Excel VBAのRangeとCellsの違いを完全解説!セルの取得と範囲操作の使い分け
生徒
「VBAでセルに文字を入力したいのですが、Range("A1")と書く方法と、Cells(1, 1)と書く方法があると聞きました。どちらを使えばいいのでしょうか?」
先生
「どちらも正解ですよ!ただ、この二つにはそれぞれ得意分野があります。普段のExcel操作に近い感覚で書けるのが Range、プログラムで自動的に場所を変えながら動かすのが得意なのが Cells です。」
生徒
「なるほど。具体的に何が違って、どう使い分けるのか詳しく知りたいです!」
先生
「基本から応用まで、初心者の方にもわかりやすく順番に解説していきますね!」
1. セルを指定する二つの基本:RangeとCellsとは?
Excel VBA(ブイビーエー)を使って自動化を行う際、最も頻繁に行う操作が「セルを指定すること」です。セルとは、Excelのシート上にある一つ一つのマスのことです。このマスに値を書き込んだり、色を変えたりするために、VBAには主に二つの命令が用意されています。
一つ目は Range(レンジ) です。これは直訳すると「範囲」という意味で、私たちがExcelの画面で見ている「A1」や「B5」といった列(アルファベット)と行(数字)の組み合わせで場所を指定します。二つ目は Cells(セルズ) です。こちらは「Cells(行番号, 列番号)」という形式で、どちらも数字で指定するのが特徴です。プログラミング未経験の方は、まずこの「名前で呼ぶRange」と「番号で呼ぶCells」という違いをイメージしてください。
2. Range("A1")の使い方とメリット
Rangeは、私たちが普段Excelを使っている感覚に非常に近い書き方です。例えば「A1番地のセル」と言いたいときは、そのまま Range("A1") と記述します。ダブルクォーテーション(" ")で囲むのがルールです。
最大のメリットは、コードを読んだときに「どこのセルを指しているか」が直感的にわかることです。また、一つのセルだけでなく、複数のセルをまとめて指定するのも得意です。例えば Range("A1:B3") と書けば、A1からB3までの四角い範囲を一度に操作できます。特定の場所が固定されている設定表や、決まったタイトルのセルを操作する場合には、Rangeを使うのが最も自然で間違いがありません。
Sub RangeSample()
' A1セルに「こんにちは」と入力します
Range("A1").Value = "こんにちは"
' A3からC3までまとめて色を塗るなどの操作もRangeが得意です
Range("A3:C3").Interior.Color = vbYellow
End Sub
3. Cells(1, 1)の使い方とメリット
一方で Cells は、行と列の両方を「数字」で指定します。例えば Cells(1, 1) は、1行目の1列目、つまり「A1」セルを指します。Cells(5, 2) なら、5行目の2列目なので「B5」セルになります。
なぜわざわざアルファベットではなく数字を使うのでしょうか?それは、プログラミングの得意技である「繰り返し処理」と非常に相性が良いからです。例えば、1行目から100行目まで順番にチェックしたいとき、行番号を数字で扱えれば、1、2、3…とカウントアップしながら操作できます。列についても、26列目の「Z」の次は「AA」になりますが、数字なら26の次は27、と単純に計算できます。このように「場所を計算して決めたい」ときは Cells が圧倒的に便利です。
Sub CellsSample()
' 1行目の1列目(A1)に数字を入れます
Cells(1, 1).Value = 100
' 変数(数字を入れる箱)を使って場所を自由に変えられます
Dim rowNum As Integer
rowNum = 5
Cells(rowNum, 2).Value = "ここはB5です"
End Sub
4. RangeとCellsの決定的な違い:引数の指定方法
ここで少し難しい言葉ですが「引数(ひきすう)」という用語について解説します。引数とは、命令に渡す詳細設定のようなものです。RangeとCellsでは、この情報の渡し方が異なります。
Rangeは "A1" という文字列(文字の塊)を受け取ります。対してCellsは 1, 1 という二つの数字を受け取ります。この違いにより、実行速度や書きやすさが変わります。単一のセルを指す場合、実はCellsの方がコンピュータにとっては理解しやすいと言われています。しかし、人間にとってはアルファベットの方がわかりやすいため、基本的には「固定の場所ならRange」、「動かす場所ならCells」という役割分担が生まれます。また、Cellsには「全てのセル」という意味もあり、シート全体の書式をリセットする際などにも使われます。
5. 初心者が迷うポイント:列のアルファベット指定
Cellsを使うとき、列番号を数字で数えるのが面倒に感じることがありますよね。「J列って何番目だっけ?」と指折り数えるのは大変です。実は Cells には、列の部分だけアルファベットで書くという「裏技」のような書き方があります。Cells(1, "J") と書けば、1行目のJ列を指すことができます。
「じゃあ全部これでいいじゃないか」と思うかもしれませんが、これはあくまで一つのセルを指すときの書き方です。プログラムの中で「左から3番目の列を処理する」といった柔軟な動きを作りたいときは、やはり数字での指定が必要になります。まずは数字に慣れることが大切ですが、どうしても数えるのが大変な初期段階では、この書き方を活用してコードを読みやすく保つのも一つの手です。
6. 応用編:Rangeの中にCellsを入れるテクニック
VBAの面白いところは、RangeとCellsを組み合わせて使える点です。例えば、「開始位置」と「終了位置」を Cells で指定して、その全体範囲を Range で囲むという書き方があります。これは実務で非常によく使われるテクニックです。
例えば、変数を使って「データが入っている最後のセルまでを選択したい」という場合、行番号が数字でわかる Cells を使い、それを Range の中に入れることで、動的な範囲指定が可能になります。これを使えるようになると、「データが10行のときもあれば、1000行のときもある」といったバラバラな資料の自動化に対応できるようになります。一見複雑に見えますが、構造を理解すれば非常に強力な武器になります。
Sub CombinedSample()
' A1セルから、5行目の3列目(C5)までの範囲を指定します
' Range(開始セル, 終了セル) という書き方です
Range(Cells(1, 1), Cells(5, 3)).Select
' 選択した範囲の枠線を太くするなどの処理ができます
Selection.Borders.Weight = xlThick
End Sub
7. セル操作の注意点:シートの指定を忘れずに
RangeやCellsを使うときに初心者が最もやってしまいがちなミスが「シートの指定漏れ」です。単に Range("A1") と書くと、VBAは「今たまたま開いているシート(アクティブシート)」のA1を操作しようとします。もし別のシートを開いた状態で実行してしまうと、意図しない場所を書き換えてしまう危険があります。
安全なプログラムを作るためには、Worksheets("Sheet1").Range("A1") のように、どのシートのセルなのかを明示的に書く癖をつけましょう。これは Cells でも同様です。シート名を指定することで、たとえ別の作業をしていても、プログラムは正確に目的の場所を見つけて処理を実行してくれます。パソコンに不慣れなうちは面倒に感じますが、これが大きなトラブルを防ぐ秘訣です。
8. 使い分けの判断基準:結局どっちを使う?
これまでの内容を整理して、使い分けの基準を明確にしましょう。判断に迷ったときは、以下の基準を参考にしてください。まず、操作したい場所が決まっていて、コードを後から見たときに一瞬で場所がわかってほしい場合は Range を使います。例えば「合計」と書かれたセルの隣や、決まった入力欄などです。
逆に、表の上から下まで順番に処理をしたい場合や、条件によって何列目を操作するかを変えたい場合は Cells を使います。実務のコードでは、この二つが混ざって出てくるのが普通です。「どちらか一方が優れている」わけではなく、道具箱の中のドライバーとハンマーのように、用途に合わせて最適な方を選ぶのがVBA上達への近道です。
Sub FinalSample()
' 見出し部分はRangeで固定操作
Range("A1").Value = "売上集計"
Range("A1").Font.Bold = True
' データ部分はCellsで繰り返し操作(例:2行目から10行目まで)
Dim i As Integer
For i = 2 To 10
Cells(i, 1).Value = "データ" & (i - 1)
Next i
End Sub
9. オブジェクトとプロパティの考え方
最後に、少しだけ理論的な話をします。VBAにおいて、RangeやCellsは オブジェクト と呼ばれます。これは「物」という意味です。そして、その後に続く .Value(値)や .Interior(内部)などは プロパティ と呼ばれ、「物の状態や属性」を指します。プログラミング未経験の方は、「セルという物を指定して、その状態をどう変えるか」を指示しているのだと考えてください。
この考え方がわかると、RangeやCellsの後にドット(.)を打ったときに出てくるたくさんの選択肢の意味が理解しやすくなります。文字を大きくするのも、セルの色を変えるのも、セルの名前を変えるのも、すべては「物を指定する(Range/Cells)」→「状態を選ぶ」という同じ流れです。この基本構造さえ掴んでしまえば、Excel VBAの世界は一気に広がります。焦らず、まずはこの二つの書き方に慣れていくことから始めてみましょう。