セル・範囲(Range / Cells)を解説
わかりやすく、手を動かしながら学べるように進めます。まずは「イメージ」→「基本コード」→「応用パターン」→「練習問題(解答+手順)」の順に。
1. イメージのおさらい
- セル = Excel の 1つの箱(例:
A1、B3)。 - 範囲(Range) = セルをまとめたもの(例:
A1:C3は A1〜C3 の長方形)。 - VBAで操作する理由:人が手でやる作業(値を入れる、色を付ける、コピーする)を自動化できる。
2. 基本コード(まずは読んでコピペして動かしてみよう)
単一セルに値を入れる(Range)
Sub Example_SingleRange()
Range("B3").Value = 100 ' B3 に 100 を入れる
End Sub
VB複数セルに同じ値を入れる(Range)
Sub Example_BlockRange()
Range("A1:C2").Value = "Hello" ' A1〜C2 の全部に "Hello"
End Sub
VBCells を使う(行番号・列番号で指定)
Sub Example_Cells()
Cells(2, 3).Value = 5 ' 2行3列 = C2 に 5 を入れる
End Sub
VBRange と Cells を組み合わせる(動的な範囲)
Sub Example_RangeWithCells()
Dim r1 As Range
Set r1 = Range(Cells(1,1), Cells(5,5)) ' A1:E5 の範囲
r1.Value = "X"
End Sub
VB3. よく使う操作(読み取り・書き込み・クリア・書式)
値を読み取る(セルの中身を別のセルへ)
Sub ReadValue()
Dim v
v = Range("A1").Value
Range("B1").Value = v
End Sub
VB範囲を一気にクリアする
Sub ClearRange()
Range("A1:C10").ClearContents ' 中身だけ消す
' Range("A1:C10").Clear ' 書式も含め全部消す
End Sub
VB書式を付ける(塗りつぶし、太字)
Sub FormatRange()
With Range("A1:A5")
.Interior.ColorIndex = 36 ' 塗りつぶし
.Font.Bold = True
End With
End Sub
VB4. Cells と Range の使い分け(実務でのコツ)
- Range(“A1”) は「固定の場所」を扱うときに読みやすい。
- Cells(row, col) は「ループで位置が変わる」または「行番号が変数」になるときに便利。
- 変数で始点・終点を決めたいときは
Range(Cells(r1,c1), Cells(r2,c2))とすると柔軟。
5. 実践例題(ステップ実行で動きを確認できるサンプル)
例題1:A列に 1〜10 を入れる(単純)
Sub FillOneToTen()
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i ' i行目、1列目(A列)に i を入れる
Next i
End Sub
VB説明:For ループで i を 1→10 に変えつつ、Cells(i,1)(A1,A2,..)へ順に書く。
例題2:A1:A10 の合計を B1 に書く(読み取り→計算→書き込み)
Sub SumA1toA10()
Dim total As Double
total = WorksheetFunction.Sum(Range("A1:A10"))
Range("B1").Value = total
End Sub
VBポイント:WorksheetFunction.Sum でワークシートの関数を使えます。
例題3:掛け算表(1〜5 の 5×5 テーブル)を作る(入門向けの練習)
Sub MultiplicationTable()
Dim r As Integer, c As Integer
For r = 1 To 5
For c = 1 To 5
Cells(r, c).Value = r * c
Next c
Next r
End Sub
VB動かし方:F8(ステップ実行)で r と c の変化を追うと理解が早いです。
例題4:動的に最後の行まで処理する(空白を避ける)
Sub FillToLastRow()
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解説:Cells(Rows.Count,1).End(xlUp) は A列の最終使用セルを見つける定番テク。
6. デバッグ(初学者が絶対に覚えるべき操作)
- F8:1ステップずつ実行(変数の中身やセルの変化を観察)
- Immediate ウィンドウ(Ctrl+G):
? Cells(1,1).Valueと打つと現在の値が見える - MsgBox:途中で値を表示したいとき
MsgBox Cells(1,1).Value - ブレークポイント(左クリック):任意の行で実行を止める
7. 初心者が陥りやすいミス(チェックリスト)
Cells(行, 列)の順序を逆にしてしまう。 → 先に行、次に列。- 変数の型を小さすぎる(行数が多い場合
Integerでは足りないのでLongにする)。 Range("A1").ValueとRange("A1")を混同。.Valueを指定しないとオブジェクトを扱うことになり、時にエラーに。- シートを明示しないと、意図しないシートを操作することがある(複数シートのブックでは
Worksheets("Sheet1").Range("A1")と指定する)。
8. 練習問題(手を動かして確認)
各問題の下に模範解答+実行手順を載せます。まずは自力でやってから答えを見るのがおすすめ。
問題1
A列の 1〜20 に 1,2,3,…,20 を入れよ。
模範解答
Sub Q1()
Dim i As Long
For i = 1 To 20
Cells(i, 1).Value = i
Next i
End Sub
VB実行手順:VBA エディタで貼り付け、カーソルを置いて F5 または F8 で確認。
問題2
A1:A10 にランダムな 1〜100 の整数を入れて、B1 にその合計を書け。
模範解答
Sub Q2()
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = WorksheetFunction.RandBetween(1, 100)
Next i
Range("B1").Value = WorksheetFunction.Sum(Range("A1:A10"))
End Sub
VBポイント:RandBetween はワークシート関数を呼べます。ステップ実行で A列が埋まっていく様子を見よう。
問題3(やや発展)
A1:E1 に見出し(”No”,”Value”,”Double”,”Square”,”Note”)を入れ、A2〜A11 に 1〜10、B2〜B11 に 10〜100(10刻み)の値を入れて、C列に B列の 2倍、D列に B列の 2乗を書け。
模範解答
Sub Q3()
Range("A1:E1").Value = Array("No", "Value", "Double", "Square", "Note")
Dim i As Long
For i = 2 To 11
Cells(i, 1).Value = i - 1
Cells(i, 2).Value = (i - 1) * 10
Cells(i, 3).Value = Cells(i, 2).Value * 2
Cells(i, 4).Value = Cells(i, 2).Value ^ 2
Next i
End Sub
VBコツ:Range("A1:E1").Value = Array(...) は一度に見出しを入れる便利ワザ。
9. さらに役立つ小技(知っておくと便利)
- 配列にまとめて読み書きすると高速:大量セルをループで1つずつ処理するより
Range.Valueを配列で一気に取得して操作→一度に書き戻すと速い(中級以降で学ぶと良い)。 - シート指定は明確に:
With Worksheets("Sheet1")を使ってブロック内で.Range("A1")の形にすると安全。
10. おすすめの次の練習
- 「範囲をコピーして別シートに貼る」「ヘッダー行だけ色を付ける」「ある列の空白セルを飛ばして処理する」などを作ってみると実務で役立ちます。

