【エクセルVBAマクロ】Rangeでできることを徹底解説!Cellsとの違いは?

スポンサードリンク
VBA
  • エクセルのマクロで使われる「Range」って何?
  • 「Range」で何ができるの?
  • 「Range」と「Cells」との違いは?

このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。

  • 「Range」でできることがわかる
  • 「Range」と「Cells」との違いが学べる

VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

スポンサードリンク

Rangeでできること(エクセルVBAマクロ)

「Range」は「セルの操作や設定」を行うことができます。
具体的には下記のとおりです。

  • セルの選択
  • 値の書き込み・コピー・貼り付け
  • 書式の設定
  • セルの結合・解除
  • 行・列の挿入・削除

書き方も含め、1つ1つ詳しく見ていきましょう。

セルの選択

Sub セル選択()
    Range("B2").Select
End Sub

上記コードにて、セルの選択を行うことができます。

セルの選択1

複数のセルを選択することもできます。
連続した複数のセルを選択するには、下記のように記述します。

Sub セル選択()
    Range("B2:C2").Select
End Sub
セルの選択2

連続していない複数のセルを選択するには、下記のように記述します。

Sub セル選択()
    Range("B2,D2").Select
End Sub
セルの選択3

値の書き込み・コピー・貼り付け

まずは値の書き込みから解説いたします。

値の書き込み

Sub 値の書き込み()
    Range("A1").Value = "Utatane"
End Sub

上記コードにて、A1セルに「Utatane」という値を書き込みすることができます。

値の書き込み1

複数のセルに書き込みすることもできます。
連続した複数のセルに書き込みするには、下記のように記述します。

Sub 値の書き込み()
    Range("A1:A3").Value = "Utatane"
End Sub
値の書き込み2

連続していない複数のセルに書き込みするには、下記のように記述します。

Sub 値の書き込み()
    Range("A1, B2, A3").Value = "Utatane"
End Sub
値の書き込み3

変数に代入した値を書き込みすることもできます。

Sub 値の書き込み()
    char = "Utatane"
    Range("A1").Value = char
End Sub
値の書き込み4

変数については、下記記事をご参考ください。

値のコピー・貼り付け

Sub 値のコピー貼り付け()
    Range("C1").Value = Range("A1").Value
End Sub

上記コードにて、「A1セル」の値を「C1セル」にコピーすることができます。

セルのコピー1

連続した複数のセルをコピー・貼り付けすることも可能です。

Sub 値のコピー貼り付け()
    Range("C1:C2").Value = Range("A1:A2").Value
End Sub
セルのコピー2

連続していないセルをコピー・貼り付けすることはできません。

連続していれば、ズレた位置に貼り付けすることもできます。

Sub 値のコピー貼り付け()
    Range("C2:C3").Value = Range("A1:A2").Value
End Sub
セルのコピー3

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

セルのコピー4

書式もコピーしたい場合は、下記のように記述してください。

Sub 書式付き値のコピー貼り付け()
    Range("A1:A2").Copy Destination:=Range("C2:C3")
End Sub
セルのコピー5

書式の設定

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など、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

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