Home » Excel VBA Rangeオブジェクト » 表示形式 » Range.Valueで数値を取得すると表示形式によってデータ型が変化する

Range.Valueで数値を取得すると表示形式によってデータ型が変化する

動作検証バージョン:Windows 11 Home + 64bit Excel(バージョン2307 ビルド16610.20000 クイック実行)

Excelでは[セルの書式設定]ダイアログボックス-[表示形式]タブで、

さまざまな表示形式を設定できます。
数値の場合、[数値]のほか[通貨][会計]といった分類も用意されており、円マークを表示したり、マイナスのときにカッコ表示にしたり、

△や▲を表示したり

といった設定が可能です。

[スポンサードリンク]

RangeオブジェクトのValueプロパティを使って数値データを取得した場合、通常はDouble(倍精度浮動小数点数)型なのですが、先ほどのような表示形式が設定されている場合にはDoubleではない型になるケースがあります。

Range.Valueで取得した数値のデータ型を確認するサンプルマクロ

下図のように、B1:B5セルに「-1234.5」を入力してさまざまな表示形式を設定後、

以下のExcelマクロを実行してください。

Sub Valueプロパティでは表示形式に応じてデータ型が変化する()
 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ループを以下のように変更して実行すると、

 Dim rng As Range
 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と判定されます。

Range.Value2のヘルプ

このプロパティと Value プロパティの唯一の違いは、 Value2 プロパティで Currency データ型と Date データ型が使用されない点です。 倍精度浮動小数点型 (Double) を使用することにより、これらの 2 種類のデータ型の値を浮動小数点数として返すことができます。

と書かれているとおりです。

最終更新日時:2023-07-05 15:07

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » 表示形式 » Range.Valueで数値を取得すると表示形式によってデータ型が変化する

「表示形式」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.