Excel VBA | Cells × Range 実務テンプレ 20 パターン

VBA
スポンサーリンク

実務でそのまま使える Cells × Range のテンプレ 20 パターン を、
✔ コード
✔ 使いどころ
✔ 初心者向けの理解ポイント

の 3 点セットでまとめます。
すべて「実務で本当に使うもの」だけを厳選。


① 最終行(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(×))

が実務での鉄板パターンです。

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