セルに入力されているデータを取得するのは簡単です。
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
