複数のセルをまとめて扱う考え方
はじめてでも大丈夫。Excel VBAでは「範囲(Range)」を使うと、1セルずつではなく“まとめて”操作できます。表を一気に編集できる感覚をつかむと、作業が一気に楽になります。
基本の使い方と書き方
- 範囲の指定方法:
- 「左上のセル:右下のセル」で四角い範囲を指定します。
- 例:A1からC3までなら “A1:C3″。
- 書き方のパターン:
- 文字列で指定:
Range("A1:C3") - 開始と終了を2つ指定:
Range("A1", "C3") - どちらも同じ範囲を指します。
- 文字列で指定:
- まとめて値を入れる:
Range("A1:C3").Value = 10→ A1~C3のすべてに「10」を入れる。- 文字列もOK:
Range("D5:E6").Value = "日本語"
よく使う操作
- 値の入力(全セル同じ値):
Range("A1:C3").Value = 0 - 書式設定(見た目を整える):
- 太字:
Range("A1:C3").Font.Bold = True - 背景色:
Range("A1:C3").Interior.Color = RGB(255, 255, 0) - 中央揃え:
Range("A1:C3").HorizontalAlignment = xlCenter
- 太字:
- サイズ情報の取得:
- 行数:
Range("A1:C3").Rows.Count→ 3 - 列数:
Range("A1:C3").Columns.Count→ 3
- 行数:
- 連続していない範囲の指定:
Union(Range("A1:A3"), Range("C1:C3")).Value = 1- 列Aと列Cだけをまとめて扱う。
- 表の端まで広げる(CurrentRegion):
Range("A1").CurrentRegion.Select→ A1から連続するデータのかたまり全体を選ぶ。
例題で身につける
例題1: 3×3の範囲に同じ値を入れる
Sub Example1_FillSameValue()
Range("A1:C3").Value = 10
End Sub
VB- ポイント:
- 範囲指定: “A1:C3” はA~C列・1~3行の四角形。
- 一括入力: .Value は指定範囲の全セルに同じ値を入れる。
例題2: 見出しを作って見た目を整える
Sub Example2_StyleHeader()
Range("A1:C1").Value = Array("商品", "数量", "価格")
With Range("A1:C1")
.Font.Bold = True
.Interior.Color = RGB(220, 230, 241) '薄い青
.HorizontalAlignment = xlCenter
End With
Range("A1:C1").EntireColumn.AutoFit '列幅を自動調整
End Sub
VB- ポイント:
- 行に配列で一括入力: 1行分なら
Array(...)で横並びに入る。 - With構文: 同じ範囲に複数の設定をスッキリ書ける。
- 行に配列で一括入力: 1行分なら
例題3: 連続データを表のかたまりごと選ぶ
Sub Example3_CurrentRegionFormat()
'A1から始まる連続する表全体に枠線と中央揃え
With Range("A1").CurrentRegion
.Borders.LineStyle = xlContinuous
.HorizontalAlignment = xlCenter
End With
End Sub
VB- ポイント:
- CurrentRegion: 空白行・空白列で囲まれた“連続した表”全体を自動で掴む。
例題4: 斜めに番号を入れてみる(セルごとに違う値)
Sub Example4_FillSequence()
Dim r As Range
Set r = Range("A1:C3")
Dim i As Long, j As Long
For i = 1 To r.Rows.Count
For j = 1 To r.Columns.Count
r.Cells(i, j).Value = (i - 1) * r.Columns.Count + j '1,2,3...9
Next j
Next i
End Sub
VB- ポイント:
- Cells(i, j): 範囲内の“相対位置”でセルを指定。
- Rows.Count/Columns.Count: 範囲のサイズを使って柔軟に処理。
例題5: 離れた列をまとめて処理(Union)
Sub Example5_UnionRanges()
Dim target As Range
Set target = Union(Range("A2:A10"), Range("C2:C10"), Range("E2:E10"))
target.NumberFormat = "0" '整数表示
target.Font.Color = RGB(0, 102, 204) '文字色を青系
End Sub
VB- ポイント:
- Union: 離れた範囲を1つのまとまりとして扱える。
つまずきやすいポイント
- 範囲の左上・右下の順番:
- “C3:A1” のように逆順はNG。必ず「左上:右下」。
- 違う型の値を混ぜない:
.Value = Array(...)は“1行×複数列”で使うのが基本。縦方向に複数行を一気に配列で入れるのはそのままだと難しい。
- アクティブなシートに注意:
- 他のシートを触るなら
Worksheets("Sheet2").Range("A1")のように“どのシートか”を明示。 - マクロ実行時に違うシートが選ばれていると、意図しない場所が変わることがある。
- 他のシートを触るなら
- 選択は必須ではない:
Range(...).Selectは基本不要。直接Range(...).Value = ...のほうが速くて安全。
ミニ練習問題
- 練習1: A1~C5に「在庫」という文字を入れ、背景を薄い黄色にし、中央揃えにしてください。
- 練習2: A2~A11に1~10の数字、B2~B11にそれぞれの2倍の値を入れてください。
- 練習3: A1から始まる連続した表全体に太枠を付け、列幅を自動調整してください。
解答と解説
練習1
問題: A1~C5に「在庫」という文字を入れ、背景を薄い黄色にし、中央揃えにしてください。
解答コード
Sub Practice1()
Range("A1:C5").Value = "在庫"
With Range("A1:C5")
.Interior.Color = RGB(255, 255, 153) '薄い黄色
.HorizontalAlignment = xlCenter '中央揃え
End With
End Sub
VB解説
Range("A1:C5").Value = "在庫"→ A1からC5までの範囲に「在庫」を一括入力。.Interior.Color = RGB(...)→ 背景色を設定。RGBは「赤・緑・青」の値で色を指定。.HorizontalAlignment = xlCenter→ セル内の文字を中央に配置。
練習2
問題: A2~A11に1~10の数字、B2~B11にそれぞれの2倍の値を入れてください。
解答コード
Sub Practice2()
Dim i As Long
For i = 1 To 10
Range("A" & i + 1).Value = i
Range("B" & i + 1).Value = i * 2
Next i
End Sub
VB解説
For i = 1 To 10→ 1から10まで繰り返す。Range("A" & i + 1)→ i=1ならA2、i=2ならA3…と動的にセルを指定。Range("B" & i + 1).Value = i * 2→ A列の値の2倍をB列に入れる。
練習3
問題: A1から始まる連続した表全体に太枠を付け、列幅を自動調整してください。
解答コード
Sub Practice3()
With Range("A1").CurrentRegion
.Borders.LineStyle = xlContinuous '枠線を付ける
.Borders.Weight = xlThick '太線にする
.EntireColumn.AutoFit '列幅を自動調整
End With
End Sub
VB解説
Range("A1").CurrentRegion→ A1から始まる「連続した表全体」を自動で選択。.Borders.LineStyle = xlContinuous→ 枠線を付ける。.Borders.Weight = xlThick→ 枠線を太くする。.EntireColumn.AutoFit→ 列幅を内容に合わせて自動調整。
まとめ
- 練習1: 範囲に同じ文字を入れて、見た目を整える。
- 練習2: ループを使って連続した数値を入力。
- 練習3: CurrentRegionで表全体を自動認識して整形。
👉 これらを組み合わせると、簡単な「在庫表」や「売上表」を自動で作れるようになります。
次のステップとして「セルごとに違う値を入れる」や「離れた範囲をまとめて扱う」練習をすると、さらに応用力がつきます。
