はじめに
Excel VBAで「離れたセルをまとめて処理」したいときは、Rangeオブジェクトを使います。カンマで区切るだけで複数のセルや範囲をひとつにまとめて扱えるので、初心者でもすぐに使いこなせます。
Rangeで複数セルを一度に扱う
基本の書き方
- 単独セルを複数指定:
Range("A1, C2, D5")
VB- 範囲と組み合わせて指定:
Range("A1, C3:D5")
VB- 変数に入れて使いやすくする:
Dim tgt As Range
Set tgt = Range("A1, C3:D5")
VB- まとめて値を入れる:
Range("A1, C2, D5").Value = 10
' A1, C2, D5 に 10 が同時に入る
VBよく使う操作の例
値を入力する
- 同じ値を一括入力:
Sub 同じ値を入れる()
Range("A1, C2, D5").Value = 10
End Sub
VB- 数式を一括入力:
Sub 数式を入れる()
Range("A1, C2, D5").Formula = "=SUM(B1:B5)"
End Sub
VB書式を設定する
- 背景色・文字色・太字をまとめて適用:
Sub 書式をまとめて設定()
With Range("A1, C3:D5")
.Interior.Color = RGB(255, 255, 153) ' 薄い黄色
.Font.Color = RGB(0, 102, 204) ' 濃い青
.Font.Bold = True
End With
End Sub
VBサイズ・枠線を設定する
- 列幅・行の高さ・罫線:
Sub サイズと枠線()
With Range("A1, C3:D5")
.Columns.ColumnWidth = 15
.Rows.RowHeight = 20
.Borders.LineStyle = xlContinuous
End With
End Sub
VB離れたセルをループ処理する
- Eachで個別に処理:
Sub ループで個別処理()
Dim c As Range
For Each c In Range("A1, C2, D5")
c.Value = c.Address & " に入力"
Next c
End Sub
VB例題で理解を深める
例題1: 指定セルに同じメッセージを入れる
- ねらい: カンマ区切りで複数セルに一括入力
Sub 例題1()
Range("B2, E3, H4").Value = "OK"
End Sub
VB例題2: 離れた範囲に同じ書式を適用
- ねらい: 単独セルと範囲の混在指定
Sub 例題2()
With Range("A1, C3:D5, F2:F4")
.Interior.Color = RGB(220, 242, 255)
.Font.Size = 12
.Borders.LineStyle = xlContinuous
End With
End Sub
VB例題3: 0以下の値だけ赤字にする(条件付きの個別処理)
- ねらい: ループでセルごとに判定
Sub 例題3()
Dim r As Range, c As Range
Set r = Range("B2, D2:D6, F4")
For Each c In r
If IsNumeric(c.Value) Then
If c.Value <= 0 Then c.Font.Color = RGB(200, 0, 0)
End If
Next c
End Sub
VB例題4: 入力のあるセルだけ背景色を変える
- ねらい: 空チェックと書式変更
Sub 例題4()
Dim target As Range, c As Range
Set target = Range("A1, C3:D5")
For Each c In target
If Len(c.Value) > 0 Then
c.Interior.Color = RGB(255, 230, 180)
End If
Next c
End Sub
VBはまりがちなポイントとコツ
- セルの指定方法:
Rangeの文字列は「A1形式」で書く。スペースは入れても動くが、見やすさ重視で入れすぎない。 - 複数範囲の性質:
カンマでつないだRangeは「複数エリア」を持つ。.Areasで各エリア単位にアクセスできる。
Sub エリアごとに処理()
Dim rs As Range, a As Range
Set rs = Range("A1, C3:D5")
For Each a In rs.Areas
a.Interior.Color = RGB(240, 240, 240)
Next a
End Sub
VB- サイズ依存の操作に注意:
例えば.Copy Destination:=Range("X1")のようなコピーは、複数エリアだと形がバラける。ループで1セルずつ処理するほうが安全。 - 参照先のシート指定:
どのシートか曖昧だと意図しない場所を操作することがある。Worksheets("Sheet1").Range("A1, C2")のように、積極的にシートを明示する。
まずはここから練習
- 同じ値の一括入力:
Range("A1, B3, D4").Value = "Hello" - 範囲+単独の混在:
Range("A1, C2:D3").Interior.Color = RGB(255, 255, 153) - ループで個別書式:
Dim c As Range For Each c In Range("A1, C2, D5") c.Font.Bold = True Next c
