Excel VBA | セルを扱う方法

VBA
スポンサーリンク

セル・範囲(Range / Cells)を解説

わかりやすく、手を動かしながら学べるように進めます。まずは「イメージ」→「基本コード」→「応用パターン」→「練習問題(解答+手順)」の順に。


1. イメージのおさらい

  • セル = Excel の 1つの箱(例:A1B3)。
  • 範囲(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
VB

Cells を使う(行番号・列番号で指定)

Sub Example_Cells()
    Cells(2, 3).Value = 5   ' 2行3列 = C2 に 5 を入れる
End Sub
VB

Range と Cells を組み合わせる(動的な範囲)

Sub Example_RangeWithCells()
    Dim r1 As Range
    Set r1 = Range(Cells(1,1), Cells(5,5)) ' A1:E5 の範囲
    r1.Value = "X"
End Sub
VB

3. よく使う操作(読み取り・書き込み・クリア・書式)

値を読み取る(セルの中身を別のセルへ)

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
VB

4. 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(ステップ実行)で rc の変化を追うと理解が早いです。


例題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").ValueRange("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. おすすめの次の練習

  • 「範囲をコピーして別シートに貼る」「ヘッダー行だけ色を付ける」「ある列の空白セルを飛ばして処理する」などを作ってみると実務で役立ちます。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました