Excel VBA | セル範囲を参照

VBA
スポンサーリンク

では「セルを参照する(単一セル)」をプログラミング初心者向けにやさしく噛み砕いて、実際に手を動かせる題(解説付き)を交えて詳しく説明します。Excel VBA にまだ慣れていない方向けに、感覚→コード→実行→デバッグの順で進めます。

まず感覚をつかむ(イメージ)

  • Excel上の「セル」はプログラムから見ると オブジェクト(もの)です。
  • その“セルオブジェクト”を扱うための型(クラス)が Range(レンジ) です。
  • つまり「A1セルに値を入れる」とは「A1 を表す Range オブジェクトを取ってきて、その Value(値)プロパティに代入する」ということになります。

基本の書き方(これだけ覚えればOK)

' 1行で書く(アクティブシートの A1 に 10 を入れる)
Range("A1").Value = 10

' 変数に格納して使う(読み書き複数回するなら便利)
Dim r As Range
Set r = Worksheets("Sheet1").Range("A1")
r.Value = "こんにちは"
VB

ポイント:

  • Range("A1") は A1 を指す Range オブジェクトを返す。
  • Value はそのセルの中身(値)を表すプロパティ。
  • Set はオブジェクト変数に代入するときに使います(初学者がよく忘れる箇所)。

よく使うパターン(初心者がすぐ便利に使える例)

1) アクティブシートに書く(簡単)

Range("B2").Value = 100
VB

2) 特定のシートに書く(安全)

Worksheets("Sheet1").Range("C3").Value = "完了"
VB

3) 変数で扱って複数操作(読み→書き→書式)

Dim r As Range
Set r = Worksheets("Sheet1").Range("D4")
Dim v As Variant
v = r.Value            ' 値を読み取る
r.Value = v & " OK"    ' 値を変更して書き戻す
r.Font.Bold = True     ' 書式も変更可能
VB

4) Cells プロパティの併用(行番号・列番号で指定)

' Cells(行, 列) で指定(1,1 は A1)
Worksheets("Sheet1").Cells(2, 1).Value = "行列指定"
VB

Cells はループで行列を扱うときに便利です。

実行とデバッグの基本(VBA エディタで)

  1. Excel の「開発」タブ →「Visual Basic」または Alt + F11 でエディタを開く。
  2. 新しいモジュールを追加(挿入 → 標準モジュール)してコードを貼る。
  3. F8(ステップ実行)で、どの順で処理されるか見ながら実行する。
  4. 変数や Range の中身はマウスを合わせるとツールチップで確認できる(ローカルウィンドウ/ウォッチも便利)。
  5. Immediate ウィンドウ(Ctrl+G)で ? Range("A1").Value と打てば即座に値が見られます。

例題(初心者向け)— 解答と解説


例題1(超入門)

問題:アクティブシートの A1 に数値 123 を書くマクロを作成しなさい。
解答コード

Sub Example1()
    Range("A1").Value = 123
End Sub
VB

解説Range("A1") が A1 のセルを指し、.Value = 123 で中身を書き換えます。シートを指定していないので、実行時のアクティブシートに書き込まれます。


例題2(少し実務寄り)

問題:Sheet 名が "Data" のシートの B2 に文字列 "完了" を書くマクロを作りなさい。
解答コード

Sub Example2()
    Worksheets("Data").Range("B2").Value = "完了"
End Sub
VB

解説Worksheets("Data") で特定のシートを指定しています。これでアクティブシートが何であっても "Data" シートの B2 に必ず書き込めます(シート名が間違っているとエラーになります)。


例題3(読み取り→加工→書き戻し)

問題:Sheet "Data"C3 の値を読み取り、その後 C4"[読み取った値] processed" を書きなさい。
解答コード

Sub Example3()
    Dim v As Variant
    Dim ws As Worksheet
    Set ws = Worksheets("Data")
    
    v = ws.Range("C3").Value         ' C3 の値を読み取る
    ws.Range("C4").Value = v & " processed"  ' 加工して C4 に書く
End Sub
VB

解説:値を一度 v に取り出してから加工し、別セルに書き戻しています。途中の v を Immediate ウィンドウで ? v と打てば中身確認できます。


よくある初心者のミスと対処法

  • ミスSet を忘れて Set r = Worksheets("Sheet1").Range("A1")r = ... と書いてしまう。
    対処:オブジェクト変数には必ず Set を使う。エラーが出るので気付けます。
  • ミス:シート名が存在しないと実行時エラー。
    対処:事前にシートが存在するかチェックするか、シート名を間違えない。あるいは ThisWorkbook.Worksheets("Sheet1") のようにブック指定する。
  • ミス:アクティブシートを前提にしてしまい、別のシートに書き込まれる。
    対処:明示的に Worksheets("SheetName") を使う習慣をつける。

少し応用:変数でセルを切り替える(実務でよく使う)

Sub DynamicCell()
    Dim rowNum As Long
    rowNum = 5
    Worksheets("Sheet1").Range("A" & rowNum).Value = "行番号を使った書き込み"
    ' あるいは Cells を使う
    Worksheets("Sheet1").Cells(rowNum, 2).Value = "Cells(行,列)で書き込み"
End Sub
VB

→ 行番号を変えれば同じ処理で複数行に自動で書けます。

実践アドバイス(これを意識すると早く上達します)

  1. まずは手でやってみる:A1に直接値を書いてみる。これがコードの動きと結びつきます。
  2. 変数に格納してから操作:同じセルを複数回触るなら Set r = ... して使うとコードが読みやすくなります。
  3. シートは明示的に指定:実務では Worksheets("名前") を使う習慣を。
  4. F8でステップ実行:処理の進み方が見えて、とても勉強になります。
  5. Immediate ウィンドウとウォッチ:途中の値を確認するのに便利。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました