Excelでは[セルの書式設定]ダイアログボックス-[表示形式]タブで、
さまざまな表示形式を設定できます。
数値の場合、[数値]のほか[通貨][会計]といった分類も用意されており、円マークを表示したり、マイナスのときにカッコ表示にしたり、
△や▲を表示したり
といった設定が可能です。
RangeオブジェクトのValueプロパティを使って数値データを取得した場合、通常はDouble(倍精度浮動小数点数)型なのですが、先ほどのような表示形式が設定されている場合にはDoubleではない型になるケースがあります。
Range.Valueで取得した数値のデータ型を確認するサンプルマクロ
下図のように、B1:B5セルに「-1234.5」を入力してさまざまな表示形式を設定後、
以下のExcelマクロを実行してください。
Dim rng As Range
For Each rng In Range("B1:B5")
Debug.Print _
rng.Text & vbTab & _
rng.Value & vbTab & _
TypeName(rng.Value)
Next
End Sub
イミディエイトウィンドウに、以下のように出力されます。
(1,234.50) -1234.5 Double
▲ 1,234.50 -1234.5 Double
(\1,234.50) -1234.5 Currency
\-1,234.50 -1234.5 Currency
\ -1,234.50 -1234.5 Currency
分類が[数値]で「(1,234.50)」「▲1,234.50」と表示されている場合はTypeName関数の戻り値がDoubleですが、[通貨][会計]についてはデータ型がCurrencyと判定されています。
Range.Value2で取得した数値は必ずDouble
先ほどのFor Each~Nextループを以下のように変更して実行すると、
For Each rng In Range("B1:B5")
Debug.Print _
rng.Text & vbTab & _
rng.Value2 & vbTab & _
TypeName(rng.Value2)
Next
イミディエイトウィンドウには以下のように出力されます。
(1,234.50) -1234.5 Double
▲ 1,234.50 -1234.5 Double
(\1,234.50) -1234.5 Double
\-1,234.50 -1234.5 Double
\ -1,234.50 -1234.5 Double
Range.Valueプロパティで取得したときにはCurrencyと判定されていたセルについても、Range.Value2プロパティを使えば、Doubleと判定されます。
このプロパティと Value プロパティの唯一の違いは、 Value2 プロパティで Currency データ型と Date データ型が使用されない点です。 倍精度浮動小数点型 (Double) を使用することにより、これらの 2 種類のデータ型の値を浮動小数点数として返すことができます。
と書かれているとおりです。
- Excel VBAでシリアル値を取得する-Range.Value2プロパティ
- VBAで小数の計算が合わない?
- pywin32を使ってExcelのRange.Valueで数値を取得すると表示形式によってdecimal.Decimalに
最終更新日時:2023-07-05 15:07
- Newer:xlwingsでセル内の文字数を取得するには-len()関数・Range.valueプロパティ
- Older:Shape内の文字列操作はExcel VBAよりxlwingsのほうがシンプルに書ける
Home » Excel VBA Rangeオブジェクト » 表示形式 » Range.Valueで数値を取得すると表示形式によってデータ型が変化する