Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - Range

Excel VBA VBA
スポンサーリンク

Range は「シート上の“セルや範囲”そのもの」

まずイメージからいきます。
Range オブジェクト = シート上の「セル1つ」または「セルのかたまり」そのもの です。

A1 だけを指す Range もあれば、A1:C3 のように複数セルをまとめて指す Range もあります。
VBA で「どこに書くか」「どこから読むか」を決めるとき、最後は必ず Range に行き着きます。

Workbook(ブック)
→ Worksheet(シート)
→ Range(セル・範囲)

という“階層”を意識できると、一気に世界がクリアになります。


Range の一番基本:セルを1つ指定して値を読み書きする

A1 に値を書き込む・読み取る

いちばんシンプルな形からいきます。

Sub SampleRangeBasic()

    Range("A1").Value = "こんにちは"

End Sub
VB

これは「アクティブなシートの A1 に “こんにちは” と書く」という意味です。

値を読み取るときはこうです。

Sub SampleRangeRead()

    Dim msg As String

    msg = Range("A1").Value

    MsgBox "A1 の値は「" & msg & "」です。"

End Sub
VB

ここで重要なのは、

Range(“A1”) は「セル A1 そのもの」
.Value は「そのセルの値」

という関係です。

Range は“場所”、Value は“中身”です。


「どのシートの Range か」をはっきりさせる

ws.Range(“A1”) という書き方に慣れる

超初心者のうちから、ここを強く意識してほしいです。

Range("A1")
VB

だけだと、「アクティブなシートの A1」になってしまいます。
どのシートがアクティブかによって、書き込まれる場所が変わるので、バグの元です。

一方で、こう書くとどうでしょう。

Sub SampleRangeWithSheet()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A1").Value = "ここは入力シートの A1"

End Sub
VB

ws が「入力シート」を指しているので、
ws.Range("A1") は「入力シートの A1」とハッキリ決まります。

大事なポイントは、

Range だけで書かず、
必ず「どのシートか」を前に付けて
ws.Range("A1") の形で書く癖をつけること

です。
これだけで、将来のバグがかなり減ります。


複数セルの範囲を Range で扱う

“A1:C3” のように範囲を文字列で指定する

Sub SampleRangeMulti()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A1:C3").Value = "★"

End Sub
VB

このコードは、「入力シートの A1 から C3 まで、9セル全部に “★” を入れる」という意味です。

Range(“A1:C3”) は、「A1 から C3 までの長方形の範囲」を表す Range オブジェクトです。
単一セルでも複数セルでも、どちらも Range です。

別の範囲にまとめてコピーする

Sub SampleRangeCopy()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A1:C3").Copy Destination:=ws.Range("E1")

End Sub
VB

これは、「A1:C3 をコピーして、E1 から始まる位置に貼り付ける」という意味です。
コピー元もコピー先も、どちらも Range です。


Cells と組み合わせて「行・列番号」で指定する

Cells(row, column) と Range の違い

Range(“A1”) は「A1」という“住所”で指定しますが、
Cells(行番号, 列番号) を使うと、数字で指定できます。

Sub SampleCellsBasic()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Cells(1, 1).Value = "A1 と同じ場所"
    ws.Cells(3, 2).Value = "B3 に書き込み"

End Sub
VB

Cells(1, 1) は A1、Cells(3, 2) は B3 です。

Range と Cells はよく組み合わせて使います。
例えば、「A1 から、行番号・列番号で指定したセルまで」の範囲を取りたいとき。

Sub SampleRangeWithCells()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range(ws.Cells(1, 1), ws.Cells(3, 2)).Value = "★"

End Sub
VB

これは「A1 から B3 までの範囲全部に “★”」という意味です。
行・列を変数で動かしたいときに、とても強力なパターンです。


Range を変数に入れてから使う

Range 変数を使うと、コードが読みやすくなる

Range もオブジェクトなので、変数に入れて扱えます。

Sub SampleRangeVariable()

    Dim ws As Worksheet
    Dim rng As Range

    Set ws = ThisWorkbook.Worksheets("入力")
    Set rng = ws.Range("A1:C3")

    rng.Value = "まとめて書き込み"
End Sub
VB

rng が「入力シートの A1:C3」を指しているので、
rng.Value でその範囲全体を一気に操作できます。

この書き方の良さは、

どのシートのどの範囲を触っているのか
一度 Set したら、その後は短く書ける

というところです。


Range を使うときに意識してほしい重要ポイント

「ブック → シート → Range」という順番を崩さない

いきなり

Range("A1").Value = 1
VB

と書くのではなく、頭の中で必ずこう分解して考えてください。

どのブックか → ThisWorkbook や Workbooks(“名前”)
どのシートか → Worksheets(“名前”)
どのセル・範囲か → Range(“A1”) や Range(“A1:C3”)

コードもその順番で書くと、迷いがなくなります。

Dim wb As Workbook
Dim ws As Worksheet

Set wb = Workbooks("売上集計.xlsx")
Set ws = wb.Worksheets("集計")

ws.Range("A1").Value = "OK"
VB

この形が「きれいな基本形」です。

ActiveSheet や「省略された Range」に頼りすぎない

アクティブなシートに対して Range を書くと、
ユーザーの操作や他のコードに振り回されて、意図しない場所を書き換えるリスクがあります。

超初心者のうちから、

どのブックか
どのシートか
その上でどの Range か

を毎回はっきり書く癖をつけておくと、
後で「なんでここが書き換わってるの?」という事故をかなり防げます。


まとめ:Range は「最終的にデータが出入りする“場所”」

Range の本質は、

「シート上の“どこ”を触るのかを表すオブジェクト」

です。

押さえておきたいポイントをコンパクトにまとめると、

Range(“A1”) はセル A1、Range(“A1:C3”) はその範囲全体
必ず「どのシートか」を付けて ws.Range("A1") の形で書く
Cells(行, 列) と組み合わせると、行・列番号で柔軟に指定できる
Range を変数に Set してから使うと、読みやすくて安全なコードになる

VBAVBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました