カテゴリ: Excel VBA 更新日: 2026/04/05

Excel VBAのRangeとCellsの違いを完全解説!セルの取得と範囲操作の使い分け

Range("A1")とCells(1,1)の違いと使い分けを詳しく解説
Range("A1")とCells(1,1)の違いと使い分けを詳しく解説

先生と生徒の会話形式で理解しよう

生徒

「VBAでセルに文字を入力したいのですが、Range("A1")と書く方法と、Cells(1, 1)と書く方法があると聞きました。どちらを使えばいいのでしょうか?」

先生

「どちらも正解ですよ!ただ、この二つにはそれぞれ得意分野があります。普段のExcel操作に近い感覚で書けるのが Range、プログラムで自動的に場所を変えながら動かすのが得意なのが Cells です。」

生徒

「なるほど。具体的に何が違って、どう使い分けるのか詳しく知りたいです!」

先生

「基本から応用まで、初心者の方にもわかりやすく順番に解説していきますね!」

1. セルを指定する二つの基本:RangeとCellsとは?

1. セルを指定する二つの基本:RangeとCellsとは?
1. セルを指定する二つの基本:RangeとCellsとは?

Excel VBA(ブイビーエー)を使って自動化を行う際、最も頻繁に行う操作が「セルを指定すること」です。セルとは、Excelのシート上にある一つ一つのマスのことです。このマスに値を書き込んだり、色を変えたりするために、VBAには主に二つの命令が用意されています。

一つ目は Range(レンジ) です。これは直訳すると「範囲」という意味で、私たちがExcelの画面で見ている「A1」や「B5」といった列(アルファベット)と行(数字)の組み合わせで場所を指定します。二つ目は Cells(セルズ) です。こちらは「Cells(行番号, 列番号)」という形式で、どちらも数字で指定するのが特徴です。プログラミング未経験の方は、まずこの「名前で呼ぶRange」と「番号で呼ぶCells」という違いをイメージしてください。

2. Range("A1")の使い方とメリット

2. Range(
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)の使い方とメリット

3. Cells(1, 1)の使い方とメリット
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の決定的な違い:引数の指定方法

4. RangeとCellsの決定的な違い:引数の指定方法
4. RangeとCellsの決定的な違い:引数の指定方法

ここで少し難しい言葉ですが「引数(ひきすう)」という用語について解説します。引数とは、命令に渡す詳細設定のようなものです。RangeとCellsでは、この情報の渡し方が異なります。

Rangeは "A1" という文字列(文字の塊)を受け取ります。対してCellsは 1, 1 という二つの数字を受け取ります。この違いにより、実行速度や書きやすさが変わります。単一のセルを指す場合、実はCellsの方がコンピュータにとっては理解しやすいと言われています。しかし、人間にとってはアルファベットの方がわかりやすいため、基本的には「固定の場所ならRange」、「動かす場所ならCells」という役割分担が生まれます。また、Cellsには「全てのセル」という意味もあり、シート全体の書式をリセットする際などにも使われます。

5. 初心者が迷うポイント:列のアルファベット指定

5. 初心者が迷うポイント:列のアルファベット指定
5. 初心者が迷うポイント:列のアルファベット指定

Cellsを使うとき、列番号を数字で数えるのが面倒に感じることがありますよね。「J列って何番目だっけ?」と指折り数えるのは大変です。実は Cells には、列の部分だけアルファベットで書くという「裏技」のような書き方があります。Cells(1, "J") と書けば、1行目のJ列を指すことができます。

「じゃあ全部これでいいじゃないか」と思うかもしれませんが、これはあくまで一つのセルを指すときの書き方です。プログラムの中で「左から3番目の列を処理する」といった柔軟な動きを作りたいときは、やはり数字での指定が必要になります。まずは数字に慣れることが大切ですが、どうしても数えるのが大変な初期段階では、この書き方を活用してコードを読みやすく保つのも一つの手です。

6. 応用編:Rangeの中にCellsを入れるテクニック

6. 応用編:Rangeの中にCellsを入れるテクニック
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. セル操作の注意点:シートの指定を忘れずに

7. セル操作の注意点:シートの指定を忘れずに
7. セル操作の注意点:シートの指定を忘れずに

RangeやCellsを使うときに初心者が最もやってしまいがちなミスが「シートの指定漏れ」です。単に Range("A1") と書くと、VBAは「今たまたま開いているシート(アクティブシート)」のA1を操作しようとします。もし別のシートを開いた状態で実行してしまうと、意図しない場所を書き換えてしまう危険があります。

安全なプログラムを作るためには、Worksheets("Sheet1").Range("A1") のように、どのシートのセルなのかを明示的に書く癖をつけましょう。これは Cells でも同様です。シート名を指定することで、たとえ別の作業をしていても、プログラムは正確に目的の場所を見つけて処理を実行してくれます。パソコンに不慣れなうちは面倒に感じますが、これが大きなトラブルを防ぐ秘訣です。

8. 使い分けの判断基準:結局どっちを使う?

8. 使い分けの判断基準:結局どっちを使う?
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. オブジェクトとプロパティの考え方

9. オブジェクトとプロパティの考え方
9. オブジェクトとプロパティの考え方

最後に、少しだけ理論的な話をします。VBAにおいて、RangeやCellsは オブジェクト と呼ばれます。これは「物」という意味です。そして、その後に続く .Value(値)や .Interior(内部)などは プロパティ と呼ばれ、「物の状態や属性」を指します。プログラミング未経験の方は、「セルという物を指定して、その状態をどう変えるか」を指示しているのだと考えてください。

この考え方がわかると、RangeやCellsの後にドット(.)を打ったときに出てくるたくさんの選択肢の意味が理解しやすくなります。文字を大きくするのも、セルの色を変えるのも、セルの名前を変えるのも、すべては「物を指定する(Range/Cells)」→「状態を選ぶ」という同じ流れです。この基本構造さえ掴んでしまえば、Excel VBAの世界は一気に広がります。焦らず、まずはこの二つの書き方に慣れていくことから始めてみましょう。

カテゴリの一覧へ
新着記事
New1
Office Scripts
Office Scriptsの基本!行列挿入・削除で学ぶExcel自動化コード入門
New2
Office Scripts
Office Scriptsの基本!TypeScriptの基本構文(変数・関数・return)から始めるExcel自動化入門
New3
Office Scripts
Office Scriptsの基本!スクリプト間連携とPower Automateで広がるExcel自動化の考え方
New4
Office Scripts
Office Scriptsの基本!型安全なExcel操作でミスを防ぎながら自動化する方法
人気記事
No.1
Java&Spring記事人気No1
Excel VBA
Excel VBAモジュール共有術!複数のブックでマクロを使い回す最適構成
No.2
Java&Spring記事人気No2
Excel VBA
Excel VBAのプロジェクト構成とモジュール管理!標準・シート・ThisWorkbookの違い
No.3
Java&Spring記事人気No3
Excel VBA
個人用マクロブック(PERSONAL.XLSB)で作る最強の共通ライブラリ化ガイド
No.4
Java&Spring記事人気No4
Excel VBA
ThisWorkbookに書くべき処理とは?VBAプロジェクトの正しい構成方法
No.5
Java&Spring記事人気No5
Excel VBA
VBAモジュールを安全にエクスポート・インポートする方法と注意点
No.6
Java&Spring記事人気No6
Excel VBA
Excel VBAのループ処理を徹底解説!For文とDo Loopで繰り返しを自動化
No.7
Java&Spring記事人気No7
Excel VBA
Excel VBAの開発環境を最速で整える!VBEの開き方から基本操作まで完全ガイド
No.8
Java&Spring記事人気No8
Excel VBA
Excel VBAのブレークポイント設定と使い方!初心者でも理解できるデバッグの基本