Cells を使った「実務応用 10 パターン」を、初心者でも真似できるように、コード+用途+図解イメージまでセットでまとめました。
どれも 実際の会社の Excel マクロで毎日のように使うもの です。
① 最終行を自動で取得する(A列)
最も頻出。
データ件数が変わる表を扱うとき必須。
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
VB📌 ポイント
- Rows.Count は Excel の最終行(1048576)
- 一番下から上に向かって値があるところまで戻る
📌 使い道
- データ行を自動検出
- 不定長のリスト処理
② B列に「OK」を最終行まで書き込む
Dim i As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
Cells(i, 2).Value = "OK"
Next i
VB📌 用途
- チェック結果を書き込む
- フラグ列を自動生成
③ 動的範囲を作って色塗り(A2:C最終行)
Cells × Range の最強コンビ。
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(2, 1), Cells(lastRow, 3)).Interior.Color = vbYellow
VB📌 用途
- 処理対象範囲を動的に決定
- 数千行でも自動で範囲が決まる
④ 行 × 列の2次元ループ処理
Dim r As Long, c As Long
For r = 1 To 10
For c = 1 To 5
Cells(r, c).Value = r & "," & c
Next c
Next r
VB📌 用途
- 表形式データの一括処理
- 配列のように Excel を扱える
⑤ 条件に合う行だけ背景色を変更
Dim i As Long, lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If Cells(i, 3).Value = "NG" Then
Cells(i, 3).Interior.Color = vbRed
End If
Next i
VB📌 用途
- エラー箇所だけ色付け
- NG なデータ行を強調表示
⑥ 空白セルだけ色を付ける(全列対応)
Dim r As Long, c As Long, lastRow As Long, lastCol As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
For r = 1 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📌 用途
- データの空白チェック
- 全列・全行を「網羅的に」チェック
⑦ 列を動的に判定しながら値を探す(Findなし)
Dim r As Long, lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For r = 1 To lastRow
If Cells(r, 5).Value = "完了" Then
MsgBox "完了行:" & r
End If
Next r
VB📌 用途
- 特定値の検索
- Find より安全で読みやすい(初心者向け)
⑧ 縦横に見出しを書き込むテンプレ
Dim i As Long, j As Long
For i = 1 To 5
Cells(i, 1).Value = "行" & i
Next i
For j = 1 To 5
Cells(1, j).Value = "列" & j
Next j
VB📌 用途
- テンプレートの自動生成
- レポート自動作成
⑨ ユーザーの入力行を探して追記
1行目にヘッダー、2行目以降にデータが続く表で
「空いている最初の行」に追記する例。
Dim addRow As Long
addRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(addRow, 1).Value = "新規ID"
Cells(addRow, 2).Value = "新規データ"
VB📌 用途
- ログの追記
- 新規行追加(会社で一番よく使う)
⑩ 1行丸ごとクリア(可変行)
Dim targetRow As Long
targetRow = 10 ' 例:10行目
Cells(targetRow, 1).EntireRow.ClearContents
VB📌 用途
- 特定行をまとめてリセット
- 何列あっても1行を一発で消せる
おまけ:Cells が本領発揮する場面
プログラマ視点でいうと…
行番号・列番号を変数として扱える
→ Cells(i, j) が圧倒的に強い
動的範囲
→ Range(Cells(~), Cells(~)) が鉄板
最終行・最終列の自動検出が簡単
→ 実務では 100%使う
まとめ:実務では “Range と Cells の合わせ技” が最強
| 処理 | Range | Cells | ベスト |
|---|---|---|---|
| 固定セル | ◎ | △ | Range |
| 動的セル | △ | ◎ | Cells |
| 動的範囲 | △ | ◎ | Range + Cells |
| 表データ処理 | ◯ | ◎ | Cells |
| テンプレ生成 | ◎ | ◯ | どちらでも |
