Excel VBAでセルの値を取得・設定する:Value
VBAでExcelのマクロを作成するときに、セルの値を取得したり、セルに値を設定したりする処理は頻繁に行います。ここでは、セルの値を取得・設定する際に利用する Range オブジェクトの Value プロパティについて説明します。
Value プロパティの使い方
Value プロパティの構文は以下の通りです。
Rangeオブジェクト.Value
セルに値を設定する
たとえば、セル B2 に「おはよう!」と表示してみます。
' セルB2に「おはよう!」と表示する
Range("B2").Value = "おはよう!"

Range オブジェクトに値を代入することで、セルに値を設定できます。
セルの値を取得する
セルの値を取得する場合は以下のように記述します。
' セルB2の内容を読み取る例
Dim content As String
content = Range("B2").Value
' メッセージボックスに表示
MsgBox content

Value の省略
Range オブジェクトでセルに値を設定するときは、 Value を省略することができます。
' セルB3に「こんにちは!」と表示する
Range("B3") = "こんにちは!" ' Valueの省略
省略はされていますが、コードを読む場合には「Value が省略されている」ということを意識しましょう。
ただし、Value を省略できないケースもあります。それについては後述します。
Range オブジェクト変数に対して Value を使用する
Range オブジェクトそのものを変数に代入したい場合は Set を使います。
Set 変数 = Rangeオブジェクト
Setを忘れると(Valueの省略とみなされて)Range オブジェクトの Valueプロパティの値の代入とみなされてエラーとなるので注意しましょう。
以下は変数に Value を使用した例です。
' Rangeオブジェクトを代入するための変数を準備
Dim rng As Range
Set rng = Range("B3") ' B3セルそのものを変数に代入
' 変数を使ってセルB3に「こんにちは!」と表示
rng.Value = "こんにちは!"
変数を使った処理を行う場合、 Value プロパティを省略できないケースがあります。それは Variant 型として宣言した(型を省略した場合も同様)変数に Range オブジェクトを代入して使う場合です。
' Variant型の変数を準備
Dim rng As Variant
Set rng = Range("B3") ' B3セルそのものを変数に代入
' 変数を使ってセルB3に「こんにちは!」と表示
rng = "こんにちは!" ' Valueを省略しているのでうまく表示されない
この場合 Value プロパティを省略せずに記述する必要があります。あるいは変数を Range 型で宣言してください。
' Variant型の変数を準備
Dim rng As Variant
Set rng = Range("B3") ' B3セルそのものを変数に代入
' 変数を使ってセルB3に「こんにちは!」と表示
rng.Value = "こんにちは!" ' Valueをきちんと書くことでうまく表示される