ExcelのVBA(マクロ)でセルの値を操作するために、RangeオブジェクトのValueプロパティを使います。ところが、RangeオブジェクトにはValue2というプロパティもあります。
Sheet1.Cells(1, 2).Value
Sheet1.Cells(1, 2).Value2
これまでよくわからず、2がついてた方が新しそうで便利そうだからとかいうふわっとした理由でValue2を使っていましたが、プログラマーとしてちゃんと理解して使うべきと反省して調べてみました。
答えはマイクロソフトさんのドキュメントにしっかり書いてありました。
このプロパティとValueプロパティの唯一の違いは、 Value2プロパティでは、通貨および日付のデータ型を使用しないことです。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.value2#remarks
つまり、値を取得しようとしたときにCurrencyやDateではなく、常にDoubleが返されるということですね。
Currencyはともかく、日付を日付として扱いたいときは不便かもしれませんので、その場合はValueの方がよさそうです。これまでString(文字列)の場合にもValue2を使っていましたが、これはどちらでも同じということですね。
今日もまた1つ勉強になりました。