「エクセルVBAでセルを操作したいけど、「Range」と「Cells」ってどう使い分けるんだろう…」
そんな疑問を持っていませんか?

・「Range」と「Cells」どちらを使えばいいのか、よくわからない…
・動的にセル範囲を操作したいが、うまくいかない
・VBA初心者でも簡単にセル範囲を指定できる方法を知りたい



この記事では、VBAの「RangeとCellsの使い方」について
解説します!
この記事では、VBAの基本である「Range」と「Cells」を使いセルを操作する方法について詳しく解説します。
これを読めば、 「セルにデータを入れたいけどどう指定すればいいかわからない…」 という初心者の悩みがスッキリ解消します!
例えば、 「一度に広い範囲にデータを入れる」 とか、 「指定した場所にだけデータを入力する」 といった操作が簡単にできるようになります。
この記事では、初心者向けに「基本的な使い方」から「業務で役立つ応用例」までわかりやすく解説します!
「Range」と「Cells」をマスターして、Excel作業をもっと効率化しましょう。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
この記事を見て「できるようになる」こと
この記事を読むことで、以下のことができるようになります。
- VBAでの「Range」および「Cells」プロパティの基本的な使い方を学ぶ
- 「Range」と「Cells」の使い分けについて理解する
- 「Range」と「Cells」の注意ポイントを確認する
VBA初心者必見!「Range」と「Cells」の違いを比較して範囲指定をマスターしよう
Excel VBAでセル操作をする際、欠かせないのが「Range」と「Cells」です。
でも、「どちらを使えばいいのか」 や 「違いがよくわからない」 と感じていませんか?
ここでは「Range」と「Cells」の違いを比較表でわかりやすく整理しました。
使い分けをマスターすれば、セル範囲の指定がもっと簡単になります!
「Range」と「Cells」の違い一覧
項目 | Range | Cells |
---|---|---|
主な用途 | 複数のセルやセル範囲を一括で指定・操作 | 特定のセルを正確に指定 (行番号×列番号) |
指定方法 | A1形式(例: Range("A1:C3") ) | 行番号と列番号を数値で指定 (例: Cells(1, 1) ) |
利点 | 広範囲を一度に操作可能、 複数の非連続範囲をまとめて指定可能 | 動的なセル指定やループ処理が得意 |
適した場面 | ・ 連続したセル範囲を操作する場合 ・ 複数範囲を一括操作したい場合 | ・ 行列番号を使ってセルを動的に 操作する場合 ・ ループ処理で効率化したい場合 |
応用例 | Range("A1:C3").Value = "Hello" → A1~C3にデータ入力 | Cells(1, 1).Value = "Hello" → A1にデータ入力 |
組み合わせの例 | Range(Cells(1, 1), Cells(3, 3)).Value = "Data" → A1~C3にデータ入力 | – |
「Range」と「Cells」の使い分けポイント
- 広範囲の操作には「Range」がおすすめ 「Range」の解説を見る
- 連続したセル範囲や名前付き範囲を指定したい場合は「Range」を使いましょう。
複数の範囲を一括で操作できます。
- 連続したセル範囲や名前付き範囲を指定したい場合は「Range」を使いましょう。
- 動的な操作には「Cells」がおすすめ 「Cells」の解説を見る
- 行番号や列番号を使った細かい指定や、ループ処理での自動化には「Cells」が便利です。
「Range」とは?|Excel VBAの基本「範囲指定」でセル操作を始めよう!
「Range」は、Excel VBAで特定のセルやセル範囲を指定するための基本的なオブジェクトです。
このオブジェクトを使うと、 複数のセルを一括操作 したり、 データ入力や取得 、 フォーマットの変更 などが簡単に行えます。
Rangeの基本構成について


- セル範囲
- 操作対象となるセルやセル範囲を指定します。
セル範囲はExcelのセル参照と同じ形式で指定し、単一セルの場合は「A1」のように、複数のセルを対象とする場合は「A1:C3」のように記述します。
セル範囲の指定により、複数のセルを一括で操作することが可能です。
- 操作対象となるセルやセル範囲を指定します。
Rangeの活用ポイント
特定の範囲に一括で書式を適用する場合。
Range("A1:B5").Value = "Hello"
このコードでは、セル範囲「A1」から「B5」までのすべてのセルに「Hello」という文字列を入力します。
これにより、一度に複数のセルを操作でき、効率的なデータ処理を実行することができます。


より詳しい情報は、Microsoft公式のRange オブジェクト (Excel)を参照してください。
「Cells」とは?|Excel VBAで行番号と列番号を使ってセルを正確に指定する方法
「Cells」は、Excel VBAで 行番号 と 列番号 を使って特定のセルを正確に指定するためのプロパティです。
このプロパティを活用することで、 動的なセル操作 や ループ処理 が簡単になります。
「Range」とは異なり、 単一のセル指定 に最適です!
Cellsの基本構成と使い方


- 行番号
- 対象となる行の番号を指定します。
行番号は、指定するセルがシートのどの行に位置するかを表します。
例えば、「1」を指定すると「1行目」が対象になります。
- 対象となる行の番号を指定します。
- 列番号
- 対象となる列の番号を指定します。
列番号は、指定するセルがシートのどの列に位置するかを表します。
例えば、「1」を指定すると「A列」が対象になります。
- 対象となる列の番号を指定します。
Cellsの使用方法について
1つのセルを指定の場合
Cells(1, 1).Value = "Hello"
このコードは、シートの「A1」セルに「Hello」という文字列を入力します。
「行番号」と「列番号」を使ってセルを正確に指定できるため、動的なデータ操作が可能です。
たとえば、ループ処理でセルを繰り返し変更する際にも便利です。


Cellsをループ処理で指定する場合
VBAのCellsプロパティを活用することで、変数を使って動的にセルを指定することも可能です。
これにより、大量のデータ操作や自動処理を行う際に非常に効果的です。
For i = 1 To 10
Cells(i, 1).Value = i
Next i


このコードは、シートの「A1」から「A10」までに「1から10」の値を順番に入力します。
Cells(i, 1)を使って行番号を動的に指定しているため、ループのたびに異なるセルに値を入力できます。
より詳しい情報は、Microsoft公式のWorksheet.Cells プロパティ (Excel)を参照してください。
「Range」と「Cells」の使い分け | どちらを使うべきか?
「Range」と「Cells」はどちらもセル範囲を指定するための方法ですが、使い分けには注意が必要です。
以下の場面で、適切に使い分けることが重要です。
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
【 使い分け目次 】
- 「Range」の使用が適している場面
- 「Cells」の使用が適している場面
- 「Range」と「Cells」の組み合わせが、適している場面


「Range」での指定が適している場面
「Range」は、複数のセルをまとめて指定したり、大きなセル範囲を一度に操作したい場合に最適なオブジェクトです。
特に、連続したセル範囲や、名前付きの範囲を操作する際に便利です。
また、範囲全体に同じ操作を適用したり、複数のセルを一括で指定したいときにも有効です。
例えば、特定の範囲にデータを入力したり、範囲内のフォーマットを一括で変更するなど、広範囲なデータ操作を効率化できるのが大きな利点です。
よく使われる場面は以下の通りです。
ケース1: 連続する複数セルを操作するとき
「A1」から「B5」までのセルに同じ値を入力したい場合は、以下のように記載します。
Range("A1:B5").Value = "Hello"
このコードは、「A1」から「B5」までのすべてのセルに「Hello」という値を入力します。
セル範囲全体を一度に指定するため、手間がかかりません。


ケース2: シート全体や大きな範囲を一度に操作するとき
シート全体をクリアしたい場合は、以下のように記載します。
Range("A1:Z100").Clear
ここでは、「A1」から「Z100」までのセルを一度にクリアします。
手動で一つ一つクリアする必要がないため、効率的です。


ケース3: 名前付き範囲を操作するとき
「名前の定義」で名前を変更したセルを操作する場合、以下のように記載します。
Range("MyRange").Value = "Data"
「MyRange」という名前が付けられた範囲に、すべて「Data」という値を入力します。
「名前の定義」を使用することで、セルの場所が変わってもコードを修正する必要がなくなります。


ケース4: 複数の非連続セルを一度に操作するとき
複数の特定のセルに値を入力したい場合は、以下のように記載します。
Range("A1, C1, E1").Value = "サンプル"
このコードは、「A1」、「C1」、「E1」の各セルに「サンプル」を入力します。
非連続のセルを一度に操作できるのは、Rangeの強みです。


ケース5: 行や列全体を操作するとき
特定の行や列を一度にクリアしたい場合は、以下のように記載します。
列の場合
Range("A:A").ClearContents
行の場合
Range("1:1").ClearContents
このコードは、「A列全体」や「1行全体」の内容をクリアします。
範囲指定で行や列を操作する場合にも、Rangeが便利です。
⇒ クリアの方法については別記事で解説をしています。




「Cells」の指定が適している場面
「Cells」は、特定のセルを正確に指定したり、行番号や列番号を使って動的にセルを操作する際に最適なプロパティです。
特に、ループ処理や変数を使ってセルの位置を柔軟に変更したい場合に便利です。
また、セルを「A1」などの形式ではなく、行番号と列番号で指定したいときにも頻繁に使われます。
これにより、特定のセル操作だけでなく、データの自動入力や範囲指定を動的に行えるのが大きな利点です。
よく使われる場面は以下の通りです。
ケース1: 動的にセル範囲を指定するとき
ループ処理でセルの行や列を動的に変更しながら操作したい場合は、以下のように記載します。
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = i
Next i
このコードは、「A1」から「A10」までのセルに「1」から「10」までの値を順番に入力します。
Cells(i, 1)を使うことで、ループ処理の中で行番号を動的に変更でき、効率的にセルを操作できます。


ケース2: 行列番号で正確にセルを指定するとき
具体的な「行番号」と「列番号」を使って、特定のセルにデータを入力したい場合は、以下のように記載します。
Cells(2, 1).Value = "Name"
Cells(2, 2).Value = "Age"
このコードでは、2行目のA列に「Name」、B列に「Age」という値を入力します。
行番号と列番号を直接指定することで、セルの位置を正確にコントロールできます。


ケース3: 変数を使ってセルを指定するとき
あらかじめ「行」や「列」を変数に格納して起き、セルを操作したい場合は、以下のように記載します。
Dim rowNum As Long
Dim colNum As Long
rowNum = 2
colNum = 3
Cells(rowNum, colNum).Value = "Test"
このコードでは、「rowNum」と「colNum」で指定されたセル(ここではC3)に「Test」という値を入力します。
変数を使うことで、セルの位置を柔軟に変更することができます。


ケース4: 列をアルファベットで指定するとき
列をアルファベットで指定したい場合は、以下のように記載します。
Cells(2, Columns("C").Column).Value = "Header"
このコードでは、2行目のC列(セルC2)に「Header」という値を入力します。
列をアルファベットで指定することで、可読性が向上し、セルの位置をより直感的に理解できるようになります。




「Range」と「Cells」を組み合わせての指定が適している場面
Excel VBAでは、「Range」と「Cells」を組み合わせることで、より柔軟にセル範囲を指定することが可能です。
この方法を使えば、動的に範囲を設定できるため、特に自動化の際に役立ちます。
例えば、次のコードでは「A1」から「B2」までのセル範囲を指定しています。
Range(Cells(1, 1), Cells(2, 2)).Value = "Data"
このように、「Range」と「Cells」を組み合わせて範囲を指定することで、複数のセル範囲に一度でデータを入力したり、フォーマットを変更したりすることが可能です。
よく使われる場面は以下の通りです。
ケース1: 動的にセル範囲を指定したいとき
ループ処理や条件に応じて、開始セルと終了セルを動的に指定する場合は、以下のように記載します。
Dim startRow As Long, endRow As Long
startRow = 1
endRow = 5
Range(Cells(startRow, 1), Cells(endRow, 3)).Value = "Data"
このコードでは、「A1」から「C5」までの範囲に「Data」という値を入力します。
Cellsを使うことで複数範囲の操作や動的な範囲指定にも応用可能です。


ケース2: 配列データを一括でセル範囲に貼り付けたいとき
配列内のデータを一度に特定のセル範囲に入力する場合は、以下のように記載します。
Dim myArray As Variant
myArray = Array("A", "B", "C", "D", "E")
Range(Cells(1, 1), Cells(1, UBound(myArray) + 1)).Value = myArray
このコードでは、配列「myArray」のデータを「A1」から「E1」までのセルに一括で貼り付けます。
「Range」と「Cells」を組み合わせることで、配列の内容を効率的にセル範囲に展開できます。


ケース3: 条件に応じて動的に範囲を選択し、その範囲を操作したいとき
データが変動するシートで、範囲を動的に選択し、操作する必要がある場合。
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(lastRow, 3)).Interior.Color = RGB(255, 255, 0)
このコードでは、A列の最終行までを含む範囲に黄色の背景色を設定します。
「Range」と「Cells」を組み合わせることで、シート内の変動も動的に対応できます。


「Range」と「Cells」を使用する際の注意ポイント
「Range」と「Cells」を使用する際には、いくつかの注意点があります。
「行番号」と「列番号」の指定ミス
「Cells(1, 1)」は「A1」セルを指しますが、「行番号」や「列番号」を間違えて指定すると、予期しないセルを操作してしまうことがあります。
例えば、「行番号」と「列番号」を逆に入力してしまったり、「列番号」を数値で指定する際にアルファベットとのずれが生じることがあるため注意しましょう。
特にループ処理の際は、範囲外のセルにアクセスしてしまわないよう注意が必要です。
オブジェクト変数 (Range型) の設定ミス
「Range」や「Cells」を使う際には、オブジェクト変数を使用してセル範囲を動的に指定することが可能です。
ただし、オブジェクト変数の範囲が適切に設定されていないと、エラーの原因になります。
Dim rng As Range
Set rng = Range(Cells(1, 1), Cells(5, 5))
rng.Value = "サンプル"
このコードは、「A1」から「E5」までの範囲に「サンプル」を入力するコードです。
オブジェクト変数「rng」に範囲を設定してから、その範囲に対して操作を行っています。
オブジェクト変数詳細は別記事にまとめていますので、ご覧ください。


まとめ: RangeとCellsの効果的な活用
「Range」と「Cells」を正しく使い分けることは、Excel VBAでのセル操作を効率的に行うための基本です。
この技術を習得することで、データ操作の柔軟性が増し、より効果的に業務を進めることができます。
ポイントのおさらい
- RangeとCellsの違いを理解する
- 「Range」と「Cells」の違いを理解し、それぞれの特性に応じて使い分けることが重要です。
「Range」は広範囲のセルを一度に操作するのに便利で、「Cells」は特定のセルを正確に指定する際に役立ちます。
⇒ 「「Range」は何ができる? | 範囲指定の基本と使い方」をもう一度見る。
⇒ 「「Cells」は何ができる? | 行と列でセルを指定する方法」をもう一度見る。
- 「Range」と「Cells」の違いを理解し、それぞれの特性に応じて使い分けることが重要です。
- 動的なセル範囲の指定方法を習得する
- 動的にセル範囲を指定することで、ループ処理や条件分岐を駆使した柔軟な操作が可能になります。
これは、変数を使用する場合や、シート内のデータが変動する場面で特に効果を発揮します。
⇒ 「「Range」と「Cells」の使い分け | どちらを使うべきか?」をもう一度見る。
- 動的にセル範囲を指定することで、ループ処理や条件分岐を駆使した柔軟な操作が可能になります。
- RangeとCellsを使う際の注意ポイントを押さえる
- 「Range」と「Cells」を使う際には、行番号や列番号の指定ミスや変数の使用によるエラーに注意が必要です。
これらのポイントを押さえることで、予期せぬエラーを防ぎ、スムーズなコードの実行が可能になります。
⇒ 「「Range」と「Cells」を使用する際の注意ポイント」もう一度見る。
- 「Range」と「Cells」を使う際には、行番号や列番号の指定ミスや変数の使用によるエラーに注意が必要です。
さらに学ぶために
「Range」と「Cells」の基本を学んだら、次はこれらを活用した他のVBA機能を学びましょう。
さらに深い理解を得るために、他のVBAの記事やガイドラインを参照してください。

