Excel VBA | セル範囲を参照

VBA
スポンサーリンク

複数のセルをまとめて扱う考え方

はじめてでも大丈夫。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構文: 同じ範囲に複数の設定をスッキリ書ける。

例題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で表全体を自動認識して整形。

👉 これらを組み合わせると、簡単な「在庫表」や「売上表」を自動で作れるようになります。
次のステップとして「セルごとに違う値を入れる」や「離れた範囲をまとめて扱う」練習をすると、さらに応用力がつきます。

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