Value は「セルや範囲の“中身そのもの”を表すプロパティ」
まず一番大事なイメージから。
Value は「セル(Range)の中身そのもの」 を表すプロパティです。
Range は「場所」
Value は「その場所に入っている中身」
という関係です。
だから、
「セルに書き込む」= .Value に代入する
「セルから読み取る」= .Value を変数に入れる
という形になります。
一番基本:セルに書く・セルから読む
A1 に文字を書き込む
Sub SampleValueWrite()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Range("A1").Value = "こんにちは"
ws.Cells(2, 1).Value = 123
End Sub
VBws.Range("A1") や ws.Cells(2, 1) は「場所(Range)」.Value に代入している “こんにちは” や 123 が「中身」です。
ここでのポイントは、
「セルに値を入れるときは、ほぼ必ず .Value = 何か という形になる」
ということです。
A1 の値を読み取ってメッセージ表示
Sub SampleValueRead()
Dim ws As Worksheet
Dim msg As String
Set ws = ThisWorkbook.Worksheets("入力")
msg = ws.Range("A1").Value
MsgBox "A1 の中身は「" & msg & "」です。"
End Sub
VBmsg = ws.Range("A1").Value の部分で、
「A1 の中身」を変数 msg にコピーしています。
ここで重要なのは、
「Value は“セルの中身そのもの”なので、代入も読み取りも同じ .Value で行う」
というシンプルさです。
Value は「単一セル」でも「複数セル」でも使える
複数セルに同じ値を一気に書き込む
Sub SampleValueMultiWrite()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")
ws.Range("A1:C3").Value = "★"
End Sub
VBこのコードは、「A1 から C3 までの 9 セル全部に “★” を入れる」処理です。
Range(“A1:C3”) は「複数セルの範囲」ですが、.Value = "★" と書くと、その範囲のすべてのセルに同じ値が入ります。
「同じ値をまとめて入れたい」場面では、ループを回さずに一発で書けるので、とても便利です。
複数セルの Value を配列として受け取る(少し先の話)
超初心者の段階では「ふーん」くらいで大丈夫ですが、
複数セルの .Value を変数に入れると、「2次元配列」として受け取ることもできます。
Dim v
v = ws.Range("A1:C3").Value
VBこれは「A1:C3 の中身を、v(行, 列) でアクセスできる配列として持つ」という意味です。
配列に慣れてきたら、ここに戻ってくると一気に世界が広がります。
Value と Text の違いをざっくり知っておく
Value は「中身」、Text は「表示されている見た目」
よく出てくる疑問がこれです。
Range("A1").Value
Range("A1").Text
VB何が違うのか。
ざっくり言うと、
Value:セルの“本当の中身”
Text:セルに“表示されている文字列(書式適用後)”
です。
例えば、A1 に「日付」が入っていて、表示形式が「yyyy/mm/dd」になっているとします。
Dim v, t
v = Range("A1").Value ' 中身は日付型(シリアル値)
t = Range("A1").Text ' 画面に見えている「2026/03/23」などの文字列
VB超初心者のうちは、
「基本は Value を使う。見た目の文字列がどうしても欲しいときだけ Text」
くらいの理解で十分です。
Value を使うときに一番大事なこと:「必ず Range とセットで考える」
Value だけでは存在できない
ここが超重要ポイントです。
Value は単体では存在できません。
必ず「どのセル(Range)の Value か」とセットです。
Range("A1").Value
Cells(2, 3).Value
ws.Range("B5").Value
rng.Value
VB全部、「何かの Range の Value」です。
つまり、
Range → 場所
Value → その場所の中身
というセットを、常に頭の中に置いておくことが大事です。
「どのブック・どのシート・どのセルの Value か」を明確に書く
いきなり
Range("A1").Value = 1
VBと書くと、
「アクティブなブックの、アクティブなシートの A1」に書き込まれます。
超初心者のうちから、あえてこう書く癖をつけてください。
ThisWorkbook.Worksheets("入力").Range("A1").Value = 1
VBあるいは、変数を使って:
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("入力")
ws.Range("A1").Value = 1
VB「どのブック → どのシート → どのセル → その Value」
という順番を崩さない書き方を身につけると、
“意図しない場所を書き換える事故”が一気に減ります。
Value を使うときに意識してほしい重要ポイント
「代入」と「読み取り」が同じ書き方であることを味方にする
セルに書くときも、セルから読むときも、どちらも .Value です。
書くとき:
ws.Range("A1").Value = "OK"
VB読むとき:
msg = ws.Range("A1").Value
VBこの「同じ書き方で、“方向”だけが違う」というシンプルさは、
慣れてくるととても心強いです。
「セルの中身をどうしたいのか?」
→ それは全部 .Value を通る、と覚えておいてください。
型(文字列・数値・日付)は「入れたもの次第」
Value は「中身そのもの」なので、
文字列を入れれば文字列、数値を入れれば数値、日付を入れれば日付として扱われます。
ws.Range("A1").Value = "123" ' 文字列
ws.Range("A2").Value = 123 ' 数値
ws.Range("A3").Value = Date ' 日付
VB読み取る側の変数の型(String, Long, Date など)をどうするかは、
「そのセルに何を入れるつもりか」で決めていきます。
まとめ:Value は「セルの中身を出し入れするための“唯一の正面玄関”」
Value の本質は、
「Range(セル・範囲)の中身そのものを表し、それを読み書きするためのプロパティ」
です。
押さえておきたいポイントをコンパクトにまとめると、
Range は「場所」、Value は「その場所の中身」
単一セルでも複数セルでも .Value で書き込み・読み取りができる
基本は Value、見た目の文字列が欲しいときだけ Text
「どのブック → どのシート → どのセル → その Value」という順番を崩さない
