- エクセルのマクロで使われる「Range」って何?
- 「Range」で何ができるの?
- 「Range」と「Cells」との違いは?
このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。
- 「Range」でできることがわかる
- 「Range」と「Cells」との違いが学べる
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
Rangeでできること(エクセルVBAマクロ)
「Range」は「セルの操作や設定」を行うことができます。
具体的には下記のとおりです。
- セルの選択
- 値の書き込み・コピー・貼り付け
- 書式の設定
- セルの結合・解除
- 行・列の挿入・削除
書き方も含め、1つ1つ詳しく見ていきましょう。
セルの選択
Sub セル選択()
Range("B2").Select
End Sub
上記コードにて、セルの選択を行うことができます。

複数のセルを選択することもできます。
連続した複数のセルを選択するには、下記のように記述します。
Sub セル選択()
Range("B2:C2").Select
End Sub

連続していない複数のセルを選択するには、下記のように記述します。
Sub セル選択()
Range("B2,D2").Select
End Sub

値の書き込み・コピー・貼り付け
まずは値の書き込みから解説いたします。
値の書き込み
Sub 値の書き込み()
Range("A1").Value = "Utatane"
End Sub
上記コードにて、A1セルに「Utatane」という値を書き込みすることができます。

複数のセルに書き込みすることもできます。
連続した複数のセルに書き込みするには、下記のように記述します。
Sub 値の書き込み()
Range("A1:A3").Value = "Utatane"
End Sub

連続していない複数のセルに書き込みするには、下記のように記述します。
Sub 値の書き込み()
Range("A1, B2, A3").Value = "Utatane"
End Sub

変数に代入した値を書き込みすることもできます。
Sub 値の書き込み()
char = "Utatane"
Range("A1").Value = char
End Sub

変数については、下記記事をご参考ください。
値のコピー・貼り付け
Sub 値のコピー貼り付け()
Range("C1").Value = Range("A1").Value
End Sub
上記コードにて、「A1セル」の値を「C1セル」にコピーすることができます。

連続した複数のセルをコピー・貼り付けすることも可能です。
Sub 値のコピー貼り付け()
Range("C1:C2").Value = Range("A1:A2").Value
End Sub

連続していないセルをコピー・貼り付けすることはできません。
連続していれば、ズレた位置に貼り付けすることもできます。
Sub 値のコピー貼り付け()
Range("C2:C3").Value = Range("A1:A2").Value
End Sub

しかしながら、これまで紹介した方法では、値のみがコピーされてしまいます。

書式もコピーしたい場合は、下記のように記述してください。
Sub 書式付き値のコピー貼り付け()
Range("A1:A2").Copy Destination:=Range("C2:C3")
End Sub

書式の設定
Sub 書式の設定()
Range("A1").Interior.Color = RGB(255, 0, 0)
End Sub
「Range」でセルの書式を変更することができます。
今回はセルの背景色を変更するコードを例にしてみました(A1の背景を赤色に変更)
背景色を変更する方法については、下記記事にて詳しく解説しております。
他にも太字や斜体にしたり、文字色を変更することもできます。
複数のセルの書式を変更することも可能です。
Sub 書式の設定()
Range("A1:B10").Interior.Color = RGB(255, 0, 0)
End Sub
Sub 書式の設定()
Range("A1, B2, C3").Interior.Color = RGB(255, 0, 0)
End Sub
セルの結合・解除
Sub セルの結合()
Range("A1:B1").Merge
End Sub
上記コードにて、セルの結合を行うことができます。

結合を解除することもできます。
Sub セルの結合の解除()
Range("A1:B1").UnMerge
End Sub

(“A1:E5”)という指定をしてもエラーは出ません。
広めの範囲を指定することで、範囲内の結合をすべて解除することができます。
行・列の挿入・削除
行や列の挿入・削除を行うコードを紹介いたします。
Sub 行の挿入()
Range("B2").EntireRow.Insert
End Sub

2行目に行が挿入されました。
次は列の挿入です。
Sub 列の挿入()
Range("B2").EntireColumn.Insert
End Sub

B列が挿入されました。
同様に削除するコードも見ていきましょう。
Sub 行の削除()
Range("B2").EntireRow.Delete
End Sub

Sub 列の削除()
Range("B2").EntireColumn.Delete
End Sub

【注意点】
削除した行や列(セル)を参照する数式が入っていた場合、エラーが発生しますのでご注意ください。
例えばB2セルを参照する数式がD2セルに入っていたとします。
その状態でB列を削除すると、D2セルはエラーとなります。
RangeとCellsの違い
「Range」と「Cells」はどちらもセルの操作・設定を行うものですが、以下の違いがあります。
- 基本的な書き方
- セルの参照方法
- ループ処理との相性
- 範囲指定
ではまず書き方をくらべながら違いを見ていきましょう。
Range("A1").Value = "Utatane"
Cells(1, 1).Value = "Utatane"
上記のコードはどちらも「A1セル」に「Utatane」と書き込むマクロの一部です。
まずはわかりやすいセルの参照方法についてです。
上側の「Range」では、「A1」というようにセル名を指定しているのに対し、
下側の「Cells」では、「1,1」というように行番号と列番号で指定してします。
パッと見「Range」の方がどのセルを参照しているかがわかりやすいですよね。
またこの違いは、次のループ処理との相性にもつながってきます。
下記のコードを見てください。
For i = 1 To 10
Cells(i, 1).Value = i
Next i
「A列」の1~10行目に連番を振るコードです。
「Cells」では、セルの指定部分に変数を入れることで、参照先を容易に変更することができます。
ループ文(For文)については下記記事をご参考ください。
これは、「Cells」のセル参照が行・列ともに番号だからできることです。
一応「Range」も下記のようにすることで、できないことではないです。
For i = 1 To 10
Range("A" & i).Value = i
Next i
しかしながら、行と列が逆、つまり1行目のA列~J列に連番を振ることになったら…。
列指定がアルファベットの「Range」では容易にできません。
じゃあ「Cells」の方がいいじゃないかと思うかもしれませんが、「Range」にもメリットがあります。
それは範囲指定ができることです。
Range("A1:A10").Value = "Utatane"
Range("A1, B3, C5").Value = "Utatane"
「Range」ではA1~A10といった連続する範囲はもちろん、連続しない飛び飛びのセルを指定することができます。
一方「Cells」は1つのセルしか指定できません。
以上の特徴を知ったうえで、「Range」と「Cells」を賢く使い分けていきましょう!
最後に
エクセルのマクロ(VBAコード)でよく登場する「Range」について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!