Excel VBA | Cellsプロパティ

VBA
スポンサーリンク

Excel VBA の Cells の基礎を、初心者向けにやさしく解説

まず一歩ずつ。「セルを数で指定する」感覚になれると、VBAは一気にわかりやすくなります。ここでは、Cellsの基本から、よくある使い方、つまづきやすいポイント、練習問題まで丁寧に説明します。


Cells の基本

  • 考え方: セルは「行番号」「列番号」の2つの数字で場所が決まる
  • 書き方:
Cells(行番号, 列番号)
VB
  • 番号の始まり: 行も列も「1から」始まる
  • 例:
    • A1Cells(1, 1)
    • C2Cells(2, 3)(3列目=C列)

よくある操作

  • 値を書き込む:
Cells(2, 3).Value = 10   ' C2に10
VB
  • 背景色を変える:
Cells(1, 1).Interior.Color = vbYellow   ' A1を黄色
VB
  • 太字にする:
Cells(1, 1).Font.Bold = True
VB

Range と 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」を入れる

  • 目的: 隣の列に簡単な計算結果を自動で入れる
  • 手順:
    1. A1〜A10 に好きな数字を入れる
    2. 下のコードを標準モジュールに貼る
    3. 実行して結果を確認
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.AverageFor Each

これらをマスターすると、「条件付きでセルを操作する」力がぐっと伸びます。

👉 次のステップとして「最終行まで自動で処理する」や「複数列をまとめて扱う」練習をするとさらに実用的になります。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました