Excel VBAでセルの値を取得・設定する:Value

VBAでExcelのマクロを作成するときに、セルの値を取得したり、セルに値を設定したりする処理は頻繁に行います。ここでは、セルの値を取得・設定する際に利用する Range オブジェクトの Value プロパティについて説明します。

Value プロパティの使い方

Value プロパティの構文は以下の通りです。

Rangeオブジェクト.Value

セルに値を設定する

たとえば、セル B2 に「おはよう!」と表示してみます。

' セルB2に「おはよう!」と表示する
Range("B2").Value = "おはよう!"

vba_value1

Range オブジェクトに値を代入することで、セルに値を設定できます。

セルの値を取得する

セルの値を取得する場合は以下のように記述します。

' セルB2の内容を読み取る例
Dim content As String
content = Range("B2").Value

' メッセージボックスに表示
MsgBox content

vba_value2

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をきちんと書くことでうまく表示される