ここでは Cells プロパティでセルを指定する方法 を、プログラミング初心者向けに「超やさしく」「例題たくさん」で解説します。
Cells プロパティとは?
Excel のセルを「行番号 × 列番号」で指定できる道具(プロパティ)です。
例
Cells(1, 1)→ A1Cells(3, 2)→ B3Cells(5, 4)→ D5
Excel の「行と列」は 数字で指定できるので、プログラムで自動処理するときにとても便利!
なぜ Cells を使うの?
Range("A1") でもセルを指定できますが…
Range の弱点
- 「文字列」で書く必要がある
→Range("A" & i)のように文字を組み立てる必要がある - ループで扱うとコードが読みにくい
Cells の強み
- 行・列が「数字」だけなので、ループと相性がいい
- 書き方がシンプルで短い
基本の使い方(超シンプル版)
例1:C2(2行3列)に値を入れる
Sub Sample1()
Cells(2, 3).Value = "こんにちは"
End Sub
VB👆これは
- 2行目
- 3列目(C列)
に「こんにちは」を入れるだけのマクロです。
例2:変数を使って動くセルを操作する
Excel のセルを「1行ずつ」「値を入れながら」下に進む、というよくある処理ができます。
Sub Sample2()
Dim i As Long
For i = 1 To 5
Cells(i, 1).Value = "行番号:" & i
Next i
End Sub
VB実行すると…
| A列 |
|---|
| 行番号:1 |
| 行番号:2 |
| 行番号:3 |
| 行番号:4 |
| 行番号:5 |
こんなふうに A列に順番に書き込まれます。
例3:2次元的に行×列を自動処理する
Cells の本領発揮です!
行も列も変えながら処理できます。
<例> 3行×3列に「行,列」という文字を入れてみる
Sub Sample3()
Dim r As Long, c As Long
For r = 1 To 3
For c = 1 To 3
Cells(r, c).Value = r & "," & c
Next c
Next r
End Sub
VB結果(Excel 上)
| A | B | C |
|---|---|---|
| 1,1 | 1,2 | 1,3 |
| 2,1 | 2,2 | 2,3 |
| 3,1 | 3,2 | 3,3 |
こういう「マス目処理」がとても簡単にできます。
例4:Range と組み合わせて複数セルをまとめて扱う
Cells は
- 行番号・列番号で「1つのセル」を示す
Range(“A1:C3”) のように「範囲」を指定する場合は、Cells を2つ組み合わせることもできます。
例4:1行1列〜3行3列の範囲を取得
Dim rg As Range
Set rg = Range(Cells(1, 1), Cells(3, 3))
rg.Interior.Color = vbYellow
VB結果
A1〜C3 が黄色で塗りつぶされます。
動的に範囲を変えたいときに便利!
(Range(“A1:C3”) だと文字列操作が必要になるので面倒)
例5:最終行まで自動で値を入れる(実務で超よく使う)
これが Cells の“実務的な使い方”です。
Sub Sample5()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' A列の最終行
Dim i As Long
For i = 2 To lastRow
Cells(i, 2).Value = "OK" ' B列に書き込み
Next i
End Sub
VB何をしているの?
- A列の一番下から上に向かって最終データを探す = 最終行
- 2行目〜最終行までループ
- B列に「OK」と書き込む
データ処理でめちゃくちゃ使われるパターンです。
Cells を使うと何ができる?
| やりたいこと | Cells が得意? |
|---|---|
| A1 のように固定セルを指定 | △(Range のほうが楽) |
| 行番号が変わる処理 | ◎ |
| 列番号が変わる処理 | ◎ |
| ループでたくさん処理する | ◎ |
| 文字列連結が必要な Range の代わり | ◎ |
| 動的な範囲取得(Range + Cells) | ◎ |
まとめ(初心者向けにざっくり)
- Cells は 数字でセルを指定する道具
Cells(行, 列)- ループ処理と相性バツグン
- プログラミング的には Range より扱いやすい
- 実務では「最終行・最終列を探す」「動的範囲を作る」でほぼ必須
