VBAでExcelのマクロを作成するときに、セルの値を取得したり、セルに値を設定したりする処理は頻繁に行います。ここでは、セルの値を取得・設定する際に利用する Range オブジェクトの Value プロパティについて説明します。
Value プロパティの使い方
Value プロパティの構文は以下の通りです。
1 |
Rangeオブジェクト.Value |
セルに値を設定する
たとえば、セル B2 に「おはよう!」と表示してみます。
1 2 |
' セルB2に「おはよう!」と表示する Range("B2").Value = "おはよう!" |
Range オブジェクトに値を代入することで、セルに値を設定できます。
セルの値を取得する
セルの値を取得する場合は以下のように記述します。
1 2 3 4 5 6 |
' セルB2の内容を読み取る例 Dim content As String content = Range("B2").Value ' メッセージボックスに表示 MsgBox content |
Value の省略
Range オブジェクトでセルに値を設定するときは、 Value を省略することができます。
1 2 |
' セルB3に「こんにちは!」と表示する Range("B3") = "こんにちは!" ' Valueの省略 |
省略はされていますが、コードを読む場合には「Value が省略されている」ということを意識しましょう。
ただし、Value を省略できないケースもあります。それについては後述します。
Range オブジェクト変数に対して Value を使用する
Range オブジェクトそのものを変数に代入したい場合は Set を使います。
1 |
Set 変数 = Rangeオブジェクト |
Setを忘れると(Valueの省略とみなされて)Range オブジェクトの Valueプロパティの値の代入とみなされてエラーとなるので注意しましょう。
以下は変数に Value を使用した例です。
1 2 3 4 5 6 |
' Rangeオブジェクトを代入するための変数を準備 Dim rng As Range Set rng = Range("B3") ' B3セルそのものを変数に代入 ' 変数を使ってセルB3に「こんにちは!」と表示 rng.Value = "こんにちは!" |
変数を使った処理を行う場合、 Value プロパティを省略できないケースがあります。それは Variant 型として宣言した(型を省略した場合も同様)変数に Range オブジェクトを代入して使う場合です。
1 2 3 4 5 6 |
' Variant型の変数を準備 Dim rng As Variant Set rng = Range("B3") ' B3セルそのものを変数に代入 ' 変数を使ってセルB3に「こんにちは!」と表示 rng = "こんにちは!" ' Valueを省略しているのでうまく表示されない |
この場合 Value プロパティを省略せずに記述する必要があります。あるいは変数を Range 型で宣言してください。
1 2 3 4 5 6 |
' Variant型の変数を準備 Dim rng As Variant Set rng = Range("B3") ' B3セルそのものを変数に代入 ' 変数を使ってセルB3に「こんにちは!」と表示 rng.Value = "こんにちは!" ' Valueをきちんと書くことでうまく表示される |