では「セルを参照する(単一セル)」をプログラミング初心者向けにやさしく噛み砕いて、実際に手を動かせる題(解説付き)を交えて詳しく説明します。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
VB2) 特定のシートに書く(安全)
Worksheets("Sheet1").Range("C3").Value = "完了"
VB3) 変数で扱って複数操作(読み→書き→書式)
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 ' 書式も変更可能
VB4) Cells プロパティの併用(行番号・列番号で指定)
' Cells(行, 列) で指定(1,1 は A1)
Worksheets("Sheet1").Cells(2, 1).Value = "行列指定"
VBCells はループで行列を扱うときに便利です。
実行とデバッグの基本(VBA エディタで)
- Excel の「開発」タブ →「Visual Basic」または
Alt + F11でエディタを開く。 - 新しいモジュールを追加(挿入 → 標準モジュール)してコードを貼る。
F8(ステップ実行)で、どの順で処理されるか見ながら実行する。- 変数や Range の中身はマウスを合わせるとツールチップで確認できる(ローカルウィンドウ/ウォッチも便利)。
- 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→ 行番号を変えれば同じ処理で複数行に自動で書けます。
実践アドバイス(これを意識すると早く上達します)
- まずは手でやってみる:A1に直接値を書いてみる。これがコードの動きと結びつきます。
- 変数に格納してから操作:同じセルを複数回触るなら
Set r = ...して使うとコードが読みやすくなります。 - シートは明示的に指定:実務では
Worksheets("名前")を使う習慣を。 - F8でステップ実行:処理の進み方が見えて、とても勉強になります。
- Immediate ウィンドウとウォッチ:途中の値を確認するのに便利。
