HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > セルのValue2プロパティとは

セルのValue2プロパティとは|Excel VBA

セル操作関連のテクニック

セルのValue2プロパティとは

(Excel 97/2000/2002/2003/2007/2010/2013)

■セルの値を取得するValueプロパティ

セルに入力されているデータを取得するのは簡単です。

Sub Sample1()
    MsgBox Range("A1")
End Sub

上記の「Range("A1")」はプロパティが省略されています。
このとき、Rangeオブジェクト(セル)のプロパティを省略するとValueプロパティとみなされます。したがって、上記のマクロは

Sub Sample1()
    MsgBox Range("A1").Value
End Sub

と同じ意味になります。
このように、セルに入力されているデータを取得するにはValueプロパティを使います。

■ValueプロパティとTextプロパティ

では、セルに表示形式が設定されている場合はどうでしょう。
たとえば、セルA1には「1000」のような数値が入力されていて、このセルに「\」記号と3桁区切りの通貨書式を設定してみます。
セルの表示は「\1,000」となります。
この状態でもValueプロパティは、あくまでセルに入力されているデータを返します。
そうではなく、セルに表示されている状態を取得したいときは、ValueプロパティではなくTextプロパティを使います。

Sub Sample2()
    With Range("A1")
        MsgBox "Value --> " & .Value & vbCrLf & _
               "Text  --> " & .Text
    End With
End Sub

■日付のデータを取得するプロパティ

セルに入力された値が日付のときはどうでしょう。
セルA1に書式が何も設定されていないとき、セルに「2013/5/1」と入力すると、実際にはシリアル値がセルに格納され、同時に「yyyy/m/d」の表示形式が自動的に設定されます。
この状態で上記のSample2を実行すると、Valueプロパティは「2013/05/01」を返し、Textプロパティは「2013/5/1」を返します。

Valueプロパティはセルの値を返しますが、そのデータがシリアル値だった場合は、"短い日付の形式"で整形された結果を返します。
それに対し、Textプロパティはあくまでセルに表示されている状態を返すため、"セルの表示形式"で整形された結果が返るのです。

Valueプロパティは、セルに入力されているデータを返すはずです。
日付を入力したセルには、シリアル値という数値が入力されているのですが、Valueプロパティは、その数値を返してくれません。

こんなとき、シリアル値を取得するにはどうしたらいいでしょう。
次のように、Valueプロパティの結果に1をかけて求めることもできますが、美しくないですね。

Sub Sample3()
    MsgBox Range("A1").Value * 1
End Sub

Rangeオブジェクトには、こうしたケースで役立つ専用のプロパティがあります。
それがValue2プロパティです。

Sub Sample4()
    With Range("A1")
        MsgBox "Value   --> " & .Value & vbCrLf & _
               "Text    --> " & .Text & vbCrLf & _
               "Value2 --> " & .Value2
    End With
End Sub

Value2プロパティは、セルに日付データが入力されているとき、日付の表示形式による整形を行わず、シリアル値を返します。

●補足●

セルの値がシリアル値だった場合、Valueプロパティは日付の表示形式で整形した結果を返しますが、その形式は、コントロールパネルの[地域](または[地域と言語のオプション])の[日付(短い形式)]に設定された形式に従います。