セルに入力されているデータを取得するのは簡単です。
Sub Sample1()
MsgBox Range("D1")
End Sub
上記の「Range("D1")」はプロパティが省略されています。Rangeオブジェクト(セル)では、プロパティを省略すると
Valueプロパティとみなされます。したがって、上記のマクロは
Sub Sample1()
MsgBox Range("D1").Value
End Sub
と同じ意味になります。
このように、セルに入力されているデータを取得するにはValueプロパティを使います。では、次のケースではどうでしょう。
セルに「\」記号と3桁区切りの表示形式を設定しました。セルには「\1,000」と表示されています。この状態でもValueプロパティは、あくまで
セルに入力されているデータを返します。
そうではなく、
セルに表示されている状態を取得したいときは、Valueプロパティではなく
Textプロパティを使います。
Sub Sample2()
With Range("D1")
MsgBox "Value--> " & .Value & vbCrLf & _
"Text--> " & .Text
End With
End Sub
これは、セルに日付が入力されているときも同じです。
だけど、あれ?ちょっと待ってください。日付って、Excelは
シリアル値という連続した数値で管理しているんですよね。セルに日付を入力すると、実際には数値が入力されているはずです。
セルの表示形式を「標準」にしてみると、確かに数値が入力されているのがわかります。
Valueプロパティは、セルに入力されているデータを返すはずです。日付を入力したセルには、シリアル値という数値が入力されているのですが、Valueプロパティは、その数値を返してくれません。
あまり機会はないと思いますが、こんなときシリアル値を取得するにはどうしたらいいでしょう。
次のように、Valueプロパティの結果に1をかけて求めることもできますが、美しくないですね。
Sub Sample3()
MsgBox Range("D1").Value * 1
End Sub
実は、Rangeオブジェクトには、こうしたケースで役立つ専用のプロパティがあります。それが
Value2プロパティです。
Sub Sample4()
MsgBox Range("D1").Value2
End Sub
蛇足ですが、セルに入力されている
数式を取得するには、
Formulaプロパティを使います。
Sub Sample5()
With Range("D1")
MsgBox "Value--> " & .Value & vbCrLf & _
"Formula--> " & .Formula
End With
End Sub