Excel VBA の Cells の基礎を、初心者向けにやさしく解説
まず一歩ずつ。「セルを数で指定する」感覚になれると、VBAは一気にわかりやすくなります。ここでは、Cellsの基本から、よくある使い方、つまづきやすいポイント、練習問題まで丁寧に説明します。
Cells の基本
- 考え方: セルは「行番号」「列番号」の2つの数字で場所が決まる
- 書き方:
Cells(行番号, 列番号)
VB- 番号の始まり: 行も列も「1から」始まる
- 例:
- A1 は
Cells(1, 1) - C2 は
Cells(2, 3)(3列目=C列)
- A1 は
よくある操作
- 値を書き込む:
Cells(2, 3).Value = 10 ' C2に10
VB- 背景色を変える:
Cells(1, 1).Interior.Color = vbYellow ' A1を黄色
VB- 太字にする:
Cells(1, 1).Font.Bold = True
VBRange と Cells の使い分け
- Range は文字で指定:
Range("A1").Value = "OK"
VB- Cells は数字で指定:
Cells(1, 1).Value = "OK"
VB- 使い分けのコツ:
- 固定のセルを触るだけなら Range が読みやすい
- 繰り返し処理や動的な位置には Cells が圧倒的に便利
組み合わせ例
- 指定の範囲をまとめて扱う:
Range(Cells(1, 1), Cells(3, 2)).Interior.Color = vbCyan
' A1〜B3を水色に
VBよく使うパターン
- 行に連番を入れる:
Sub 行に連番()
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = i ' A1〜A10に1〜10
Next i
End Sub
VB- 列に同じ文字を入れる:
Sub 列に同じ文字()
Dim r As Long
For r = 1 To 5
Cells(r, 2).Value = "Hello" ' B1〜B5にHello
Next r
End Sub
VB- 二重ループで表を作る:
Sub 九九表()
Dim r As Long, c As Long
For r = 1 To 9 ' 行
For c = 1 To 9 ' 列
Cells(r, c).Value = r * c
Next c
Next r
End Sub
VB- 最後の行・列を探して連続処理(基礎版):
Sub 末尾まで足し込む()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' A列の最終行番号
Dim i As Long
For i = 1 To lastRow
Cells(i, 2).Value = Cells(i, 1).Value * 2 ' B列にA列×2
Next i
End Sub
VB例題で練習する
例題1:B列に「A列の値+100」を入れる
- 目的: 隣の列に簡単な計算結果を自動で入れる
- 手順:
- A1〜A10 に好きな数字を入れる
- 下のコードを標準モジュールに貼る
- 実行して結果を確認
Sub A列に100を足してB列へ()
Dim i As Long
For i = 1 To 10
Cells(i, 2).Value = Cells(i, 1).Value + 100
Next i
End Sub
VB- ポイント: 左の値を読み、右に書く。Cellsの「行・列」を間違えない。
例題2:見出しを作って表を整える
- 目的: 見栄えの良い表を自動整形
- 手順: A1〜C1に見出し、A2〜C6に適当な値がある想定で実行
Sub 表を整える()
' 見出しの強調
Range(Cells(1, 1), Cells(1, 3)).Font.Bold = True
Range(Cells(1, 1), Cells(1, 3)).Interior.Color = RGB(220, 230, 241)
' 全体の枠線
With Range(Cells(1, 1), Cells(6, 3)).Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(200, 200, 200)
End With
' 列幅の調整
Columns(1).ColumnWidth = 12
Columns(2).ColumnWidth = 12
Columns(3).ColumnWidth = 12
End Sub
VB- ポイント: Range(Cells, Cells)を使うと「四角い範囲」を一発指定できる。
例題3:条件付きで色を付ける
- 目的: しきい値を超えたセルにハイライト
- 手順: A1〜A20に数値が入っている前提で実行
Sub しきい値でハイライト()
Dim i As Long, threshold As Double
threshold = 50
For i = 1 To 20
If Cells(i, 1).Value >= threshold Then
Cells(i, 1).Interior.Color = vbYellow
Else
Cells(i, 1).Interior.ColorIndex = xlNone
End If
Next i
End Sub
VB- ポイント: 値の比較と見た目変更は、初心者でも使いやすい定番テクニック。
つまづきやすいポイント
- 行・列は1スタート:
- NG: 0や負数を使う
- OK: A1は
Cells(1, 1)、Z列はCells(行, 26)
- アクティブなシートに注意:
- 問題: 別のシートが選択されていると、意図しない場所に書き込む
- 対策:
Worksheets("Sheet1").Cells(1, 1).Value = "安全"
' どのシートのCellsかを明示する
VB- 型のミスマッチ:
- 問題: 文字列を計算してエラー
- 対策:
If IsNumeric(Cells(1, 1).Value) Then
Cells(1, 2).Value = Cells(1, 1).Value * 2
End If
VB- 範囲外アクセス:
- 問題: 使用範囲を大きく回しすぎると処理が遅い
- 対策: 最終行・最終列を取ってから、必要範囲だけループ
さらに一歩進む実用テク
- Range 変数に入れて再利用:
Sub 変数で扱う()
Dim r As Range
Set r = Cells(2, 3) ' C2
r.Value = "OK"
r.Font.Color = vbRed
End Sub
VB- Union で離れた範囲をまとめて処理:
Sub 離れた範囲をまとめる()
Dim rng As Range
Set rng = Union(Cells(1, 1), Cells(3, 3), Cells(5, 5))
rng.Interior.Color = RGB(255, 230, 200)
End Sub
VB- Range と Cells のハイブリッド指定:
Sub 部分範囲の合計()
Dim total As Double
total = WorksheetFunction.Sum(Range(Cells(2, 1), Cells(10, 1))) ' A2〜A10
Cells(12, 1).Value = total
End Sub
VB仕上げの練習問題
- 問題1: A1〜A20のうち、偶数だけB列にコピー
- 問題2: 2行目〜11行目のC列を「上から1ずつ増える連番」にする
- 問題3: D列の空白セルはスキップし、数値のみ合計してE1に入れる
- 問題4: A1〜C10のうち、平均より大きいセルだけ背景を薄い緑に
練習問題の解答と解説(初心者向け)
問題1:A1〜A20のうち、偶数だけB列にコピー
解答コード
Sub 偶数だけコピー()
Dim i As Long
For i = 1 To 20
If Cells(i, 1).Value Mod 2 = 0 Then ' A列の値が偶数か判定
Cells(i, 2).Value = Cells(i, 1).Value
End If
Next i
End Sub
VB解説
Modは「割り算の余り」を求める演算子x Mod 2 = 0→ 偶数判定- 偶数ならB列にコピー、奇数なら何もしない
問題2:2行目〜11行目のC列を「上から1ずつ増える連番」にする
解答コード
Sub C列に連番()
Dim i As Long
For i = 2 To 11
Cells(i, 3).Value = i - 1 ' 2行目から始めるので「行番号-1」
Next i
End Sub
VB解説
Cells(i, 3)→ C列のi行目- 2行目に「1」、3行目に「2」…と入れたいので
i - 1を使う
問題3:D列の空白セルはスキップし、数値のみ合計してE1に入れる
解答コード
Sub D列の合計()
Dim i As Long, total As Double
total = 0
For i = 1 To 20
If IsNumeric(Cells(i, 4).Value) And Cells(i, 4).Value <> "" Then
total = total + Cells(i, 4).Value
End If
Next i
Cells(1, 5).Value = total ' E1に結果を表示
End Sub
VB解説
IsNumeric→ 数値かどうか判定- 空白は
""で判定 - 条件を満たすセルだけ合計に加える
問題4:A1〜C10のうち、平均より大きいセルだけ背景を薄い緑に
解答コード
Sub 平均より大きいセルを色付け()
Dim rng As Range
Dim avg As Double
Dim c As Range
' A1〜C10の範囲を指定
Set rng = Range(Cells(1, 1), Cells(10, 3))
' 平均値を計算
avg = WorksheetFunction.Average(rng)
' 各セルをチェック
For Each c In rng
If IsNumeric(c.Value) And c.Value > avg Then
c.Interior.Color = RGB(200, 255, 200) ' 薄い緑
Else
c.Interior.ColorIndex = xlNone ' 色を消す
End If
Next c
End Sub
VB解説
WorksheetFunction.Average→ 範囲の平均値を求めるFor Each c In rng→ 範囲内のセルを1つずつ取り出す- 平均より大きいセルだけ色を付ける
まとめ
- 問題1: 偶数判定 →
Modを使う - 問題2: 連番 → 行番号をうまく利用
- 問題3: 合計 →
IsNumericと空白チェック - 問題4: 平均比較 →
WorksheetFunction.AverageとFor Each
これらをマスターすると、「条件付きでセルを操作する」力がぐっと伸びます。
👉 次のステップとして「最終行まで自動で処理する」や「複数列をまとめて扱う」練習をするとさらに実用的になります。
