Cells と Range は VBA の基礎ですが、組み合わせ次第で 柔軟な表操作・自動化 が可能です。
ここでは 実務でよく使う50パターン をまとめました。コピー&ペーストで即利用できます。
基本操作
- セル指定(行・列番号)
Cells(1, 1).Value = "A1"
VB- 範囲指定(開始セル~終了セル)
Range(Cells(1, 1), Cells(5, 3)).Select
VB- 単一セルを Range で指定
Range("B2").Value = "テスト"
VB- 複数セルを Range で指定
Range("A1:C3").Interior.Color = vbYellow
VB- セルの値取得
MsgBox Cells(2, 3).Value
VB行・列操作
- 行全体選択
Cells(3, 1).EntireRow.Select
VB- 列全体選択
Cells(1, 2).EntireColumn.Select
VB- 最終行取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
VB- 最終列取得
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
VB- 行削除
Cells(5, 1).EntireRow.Delete
VB自動範囲
- 表全体取得
Range("A1").CurrentRegion.Select
VB- UsedRange取得
ActiveSheet.UsedRange.Select
VB- 最終行+最終列で範囲指定
Range(Cells(1, 1), Cells(lastRow, lastCol)).Select
VB- 列の最終行まで範囲指定
Range(Cells(1, 2), Cells(lastRow, 2)).Select
VB- 行の最終列まで範囲指定
Range(Cells(3, 1), Cells(3, lastCol)).Select
VBコピー&ペースト
- セルコピー
Cells(1, 1).Copy Cells(2, 1)
VB- 範囲コピー
Range("A1:C3").Copy Range("E1")
VB- 値のみ貼り付け
Range("A1:C3").Copy
Range("E1").PasteSpecial xlPasteValues
VB- 書式のみ貼り付け
Range("A1:C3").Copy
Range("E1").PasteSpecial xlPasteFormats
VB- 列ごとコピー
Cells(1, 2).EntireColumn.Copy Cells(1, 5).EntireColumn
VB書式設定
- 背景色変更
Range("A1:C3").Interior.Color = vbGreen
VB- 文字色変更
Range("A1:C3").Font.Color = vbRed
VB- 太字設定
Range("A1:C3").Font.Bold = True
VB- 罫線設定
Range("A1:C3").Borders.LineStyle = xlContinuous
VB- 列幅自動調整
Range("A1:C3").EntireColumn.AutoFit
VB値操作
- 数値入力
Cells(2, 2).Value = 100
VB- 文字列入力
Cells(3, 3).Value = "Hello"
VB- 数式入力
Cells(4, 4).Formula = "=SUM(A1:A3)"
VB- 値クリア
Range("A1:C3").ClearContents
VB- 書式クリア
Range("A1:C3").ClearFormats
VB検索・置換
- 値検索
Range("A1:A100").Find("東京都").Select
VB- 値置換
Range("A1:A100").Replace What:="東京", Replacement:="TOKYO"
VB- 複数一致検索
Dim f As Range, firstAddr As String
Set f = Range("A1:A100").Find("大阪")
If Not f Is Nothing Then
firstAddr = f.Address
Do
f.Interior.Color = vbYellow
Set f = Range("A1:A100").FindNext(f)
Loop While Not f Is Nothing And f.Address <> firstAddr
End If
VB- 空白セル検索
Range("A1:A100").SpecialCells(xlCellTypeBlanks).Select
VB- 数式セル検索
Range("A1:A100").SpecialCells(xlCellTypeFormulas).Select
VBループ処理
- 行ループ
For i = 1 To lastRow
Cells(i, 1).Value = i
Next i
VB- 列ループ
For j = 1 To lastCol
Cells(1, j).Value = j
Next j
VB- 範囲ループ
Dim r As Range
For Each r In Range("A1:C3")
r.Value = "OK"
Next r
VB- 条件付きループ
For i = 1 To lastRow
If Cells(i, 2).Value = "東京都" Then
Cells(i, 3).Value = "対象"
End If
Next i
VB- 二重ループ
For i = 1 To lastRow
For j = 1 To lastCol
Cells(i, j).Value = i * j
Next j
Next i
VB応用処理
- 表の右隣にコピー
Range("A1").CurrentRegion.Copy Range("A1").CurrentRegion.Offset(0, Range("A1").CurrentRegion.Columns.Count + 1)
VB- 表の下にコピー
Range("A1").CurrentRegion.Copy Range("A1").CurrentRegion.Offset(Range("A1").CurrentRegion.Rows.Count + 1, 0)
VB- 最終行に合計行追加
Cells(lastRow + 1, 1).Value = "合計"
Cells(lastRow + 1, 2).Formula = "=SUM(B1:B" & lastRow & ")"
VB- 最終列に集計列追加
Cells(1, lastCol + 1).Value = "集計"
For i = 2 To lastRow
Cells(i, lastCol + 1).Formula = "=SUM(A" & i & ":C" & i & ")"
Next i
VB- フィルタ設定
Range("A1").CurrentRegion.AutoFilter Field:=2, Criteria1:="東京都"
VB- 並べ替え
Range("A1").CurrentRegion.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes
VB- 小計追加
Range("A1").CurrentRegion.Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(3), Replace:=True
VB- ピボット作成
ActiveWorkbook.PivotCaches.Create(xlDatabase, Range("A1").CurrentRegion).CreatePivotTable _
TableDestination:="Sheet2!R1C1", TableName:="Pivot1"
VB- 配列に読み込み
Dim data As Variant
data = Range(Cells(1, 1), Cells(lastRow, lastCol)).Value
VB- 配列から一括書き戻し
Range(Cells(1, 1), Cells(lastRow, lastCol)).Value = data
VB実務での使い分けポイント
- セル単位 → Cells
- 範囲単位 → Range
- 表全体 → CurrentRegion
- 動的範囲 → 最終行・最終列検出
- **大量処理 → 配列+一括書
