実務でそのまま使える Cells × Range のテンプレ 20 パターン を、
✔ コード
✔ 使いどころ
✔ 初心者向けの理解ポイント
の 3 点セットでまとめます。
すべて「実務で本当に使うもの」だけを厳選。
- ① 最終行(A列)を自動検出
- ② 最終列(1行目)を自動検出
- ③ A2:C最終行の動的範囲を取得
- ④ 動的範囲を丸ごとクリア
- ⑤ 行×列ループでセルを網羅的に処理
- ⑥ 行ごとに判定しながら色付け
- ⑦ 空白だけ色付け(全列対応)
- ⑧ 新規行を自動検出して追記
- ⑨ 特定列を丸ごとコピー(可変行)
- ⑩ 列のデータを別シートへ転記
- ⑪ 列でループして見出しを自動セット
- ⑫ 列全体を一撃で初期化
- ⑬ 行全体を一撃で初期化
- ⑭ フィルタ後の可視セルだけ処理
- ⑮ 数式を動的範囲にセット
- ⑯ 値を動的に取得して合計する
- ⑰ 条件に合う行番号だけリスト化
- ⑱ 2つの列の差分をチェック
- ⑲ 動的な範囲を一発で配列に読み込み
- ⑳ 配列を動的範囲へ書き戻し
- まとめ(Cells × Range の鉄板パターン)
① 最終行(A列)を自動検出
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
VB📌 可変データ処理の基本。
② 最終列(1行目)を自動検出
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
VB📌 左向き検索で最終列を取る。
③ A2:C最終行の動的範囲を取得
Set rng = Range(Cells(2, 1), Cells(lastRow, 3))
VB📌 Cells を使うと「開始位置・終了位置」の両方を動的にできる。
④ 動的範囲を丸ごとクリア
Range(Cells(2, 1), Cells(lastRow, 5)).ClearContents
VB📌 可変行の表を一撃で初期化。
⑤ 行×列ループでセルを網羅的に処理
For r = 2 To lastRow
For c = 1 To lastCol
Cells(r, c).Value = "R" & r & "C" & c
Next c
Next r
VB📌 全セルを 2 次元ループで処理する基本パターン。
⑥ 行ごとに判定しながら色付け
For i = 2 To lastRow
If Cells(i, 3).Value = "NG" Then
Cells(i, 3).Interior.Color = vbRed
End If
Next i
VB📌 NG データの強調表示は実務で超頻出。
⑦ 空白だけ色付け(全列対応)
For r = 2 To lastRow
For c = 1 To lastCol
If Cells(r, c).Value = "" Then
Cells(r, c).Interior.Color = vbYellow
End If
Next c
Next r
VB📌 欠損データチェックの定番。
⑧ 新規行を自動検出して追記
addRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(addRow, 1).Value = "新規ID"
Cells(addRow, 2).Value = "データ"
VB📌 ログ追記、履歴追加で必須。
⑨ 特定列を丸ごとコピー(可変行)
Range(Cells(2, 2), Cells(lastRow, 2)).Copy Range("F2")
VB📌 元データをコピーして別列に保存。
⑩ 列のデータを別シートへ転記
Range(Cells(2, 1), Cells(lastRow, 3)).Copy _
Sheets("Result").Cells(1, 1)
VB📌 出力シートへ動的範囲で送る。
⑪ 列でループして見出しを自動セット
For c = 1 To 10
Cells(1, c).Value = "項目" & c
Next c
VB📌 テンプレート生成で便利。
⑫ 列全体を一撃で初期化
Cells(1, 5).EntireColumn.ClearContents
VB📌 列数が変動しても安全。
⑬ 行全体を一撃で初期化
Cells(10, 1).EntireRow.ClearContents
VB📌 列数が何列でも 1 行を丸ごと消せる。
⑭ フィルタ後の可視セルだけ処理
For Each c In Range(Cells(2, 1), Cells(lastRow, 3)).SpecialCells(xlCellTypeVisible)
c.Interior.Color = vbYellow
Next
VB📌 フィルタ結果だけに操作する実務的テク。
⑮ 数式を動的範囲にセット
Range(Cells(2, 4), Cells(lastRow, 4)).Formula = "=B2*C2"
VB📌 行数に合わせて自動で数式を流し込む。
⑯ 値を動的に取得して合計する
Dim total As Double
For i = 2 To lastRow
total = total + Cells(i, 3).Value
Next i
VB📌 明細表の集計処理で頻出。
⑰ 条件に合う行番号だけリスト化
Dim outRow As Long: outRow = 1
For i = 2 To lastRow
If Cells(i, 3).Value >= 1000 Then
Sheets("Result").Cells(outRow, 1).Value = i
outRow = outRow + 1
End If
Next i
VB📌 条件一致行の抽出(中級実務で多い)。
⑱ 2つの列の差分をチェック
For i = 2 To lastRow
If Cells(i, 2).Value <> Cells(i, 3).Value Then
Cells(i, 1).Interior.Color = vbRed
End If
Next i
VB📌 A列で行にフラグをつける「差分チェック」実務の王道。
⑲ 動的な範囲を一発で配列に読み込み
arr = Range(Cells(2,1), Cells(lastRow,5)).Value
VB📌 高速化の必須テク。後から arr(r, c) で処理。
⑳ 配列を動的範囲へ書き戻し
Range(Cells(2,1), Cells(lastRow,5)).Value = arr
VB📌 数千・数万行の高速処理で必ず使う。
まとめ(Cells × Range の鉄板パターン)
Cells は
✔ 行番号
✔ 列番号
を自在に変えられるのが最大の強み。
Range は
✔ 開始セル × 終了セル
のセットで使うと最強。
つまり、
👉 固定セル → Range
👉 動的セル → Cells
👉 動的範囲 → Range(Cells(×), Cells(×))
が実務での鉄板パターンです。
