はじめてのVBAでつまずきやすいのが「Range(レンジ)」の扱いです。Rangeはセルやセル範囲そのものを表す“超・基本”のオブジェクト。ここを掴むと、入力・計算・整形・検索まで一気に楽になります。
Rangeとは何かと、参照の基本
Rangeは、ワークシート上の特定のセルや範囲を指すオブジェクトです。たとえば「A1セル」「A1:B3の範囲」を直接扱えるので、値の取得・書き込み、色やフォントの変更、数式の設定などが簡単にできます。
' 基本:単一セル
Range("A1").Value = "こんにちは"
' 複数セル:範囲
Range("A1:B3").Value = 100 ' 範囲全体に同じ値を設定
' Cellsと組み合わせて相対参照
Cells(1, 1).Value = "A1" ' 行・列で指定(1,1 は A1)
Range(Cells(1,1), Cells(3,2)).Value = 0 ' A1:B3を0で埋める
VBRangeの指定方法には「アドレス文字列(”A1″や”B2:C4″)」「Cellsとの組み合わせ」「名前付き範囲の指定」などがあり、操作の幅が広がります。
よく使うコアプロパティ(値・数式・位置・表示)
値と数式の扱い
- Value: セルの“中身”そのもの(値や文字列)を取得・設定します。最もよく使う基本プロパティです。
Range("A1").Value = 123
Debug.Print Range("A1").Value ' 123
VB- Value2: Valueに似ていますが、通貨や日付の一部の取り扱い差を気にしない“素の値”向け。実務ではValue2を好む人もいます(違いを強く意識しないならValueで十分)。
- Formula: セルに“数式文字列”を設定します。数式は必ず「=」から始めます。
Range("B1").Formula = "=SUM(A1:A10)"
VB- Text: セルの表示文字列(見えている形式)を取得します。表示形式の影響を受けるので“見た目の文字列”が欲しいときに使います。
Range("A1").NumberFormat = "#,##0円"
Range("A1").Value = 1234
Debug.Print Range("A1").Text ' "1,234円"
VBセルの位置情報
- Address: Rangeの参照文字列($A$1など)を返します。絶対参照・相対参照を切り替え可能。
Debug.Print Range("B2:C4").Address ' $B$2:$C$4
VB- Row / Column: 先頭セルの行番号・列番号を返します。
Debug.Print Range("C5").Row ' 5
Debug.Print Range("C5").Column ' 3
VB見た目を変えるプロパティ(フォント・塗りつぶし・枠線)
フォント(Font)
- Font.Name / Size / Bold / Color: 文字の種類・サイズ・太字・色を設定します。
With Range("A1").Font
.Name = "メイリオ"
.Size = 12
.Bold = True
.Color = RGB(0, 64, 128) ' 濃い青
End With
VB塗りつぶし(Interior)
- Interior.Color: セルの背景色を設定します。
Range("A1:A10").Interior.Color = RGB(255, 245, 200) ' 薄いオレンジ
VB枠線(Borders)
- Borders: 境界線スタイル・色・太さを設定します。
With Range("B2:D4").Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(200, 200, 200)
End With
VB表示形式(NumberFormat)
- NumberFormat: 表示形式を文字列で指定します(例:”#,##0.00″、”yyyy/mm/dd”)。
Range("C2").NumberFormat = "yyyy/mm/dd"
Range("C2").Value = Date
VB範囲操作のキモ(Offset・Resize・CurrentRegion・SpecialCells)
相対移動(Offset)
- Offset(rowOffset, colOffset): あるセルから相対的に移動して別のRangeを取得します。
' A1から1行下・2列右=C2へ
Range("A1").Offset(1, 2).Value = "C2"
VBサイズ変更(Resize)
- Resize(rows, cols): 起点はそのまま、行数・列数を変更した新しい範囲を作ります。
' A1を起点に 3行×2列の範囲(A1:B3)
Range("A1").Resize(3, 2).Value = 0
VBデータの島を一括取得(CurrentRegion)
- CurrentRegion: 空白行・空白列で囲まれた“連続データの塊”を返します。テーブル全体を一発取得に便利。
Range("A1").CurrentRegion.Select ' 連続領域を選択
VB条件で抽出(SpecialCells)
- SpecialCells: 定数、数式、可視セル、空白など条件でセルを抽出できます。
' 数式セルだけ色付け
On Error Resume Next
Range("A1:D20").SpecialCells(xlCellTypeFormulas).Interior.Color = RGB(230, 255, 230)
On Error GoTo 0
VB初心者がハマりやすいポイントとコツ
- ValueとTextの違い: Valueは“中身の値”、Textは“表示文字列”。見た目どおりの文字が欲しいならText、計算や比較ならValueが安全です。
- 数式は「=」から: Formulaに設定する文字列は必ず「=」で開始します。値を書きたいときはValue/Value2を使いましょう。
- OffsetとResizeの軸に注意: Offsetは“起点をずらす”、Resizeは“起点は固定でサイズ変更”。混同すると意図しない範囲を操作しがちです。
- Selectを多用しない: 可能な限りRangeに直接アクセスして処理すると速くて壊れにくいです(選択は必要な場面だけ)。
すぐ試せる練習問題と模範コード
練習1:連番入力と交互に色付け
- 目的: A1:A20に1〜20の連番を入れて、偶数行を薄灰で塗る。
Sub Practice1()
Dim i As Long
For i = 1 To 20
Range("A1").Offset(i - 1, 0).Value = i
If i Mod 2 = 0 Then
Range("A1").Offset(i - 1, 0).Interior.Color = RGB(240, 240, 240)
End If
Next i
End Sub
VB練習2:テーブル合計行の自動追加
- 目的: CurrentRegionの最終行の下に合計を出す(B列を合計)。
Sub Practice2()
Dim tbl As Range, lastRow As Long
Set tbl = Range("A1").CurrentRegion
lastRow = tbl.Rows(tbl.Rows.Count).Row
Range("A" & lastRow + 1).Value = "合計"
Range("B" & lastRow + 1).Formula = "=SUM(" & tbl.Columns(2).Address & ")"
Range("A" & lastRow + 1).Resize(1, tbl.Columns.Count).Font.Bold = True
End Sub
VB練習3:数式セルだけ背景色を外す
- 目的: 指定範囲で、数式セルの塗りつぶしをクリア。
Sub Practice3()
On Error Resume Next
Range("A1:D50").SpecialCells(xlCellTypeFormulas).Interior.ColorIndex = xlNone
On Error GoTo 0
End Sub
VBさらに深く知るためのキーワード
- Address/AddressLocal: 参照文字列の取得(ローカル言語版もあり)。
- Borders/Characters/Columns/ColumnWidth/Comment: 罫線、文字部分選択、列幅、コメント操作などの関連プロパティ群。
- プロパティとは何か: “オブジェクトの属性”。オブジェクト名.プロパティ名で参照・設定します。

