Excel VBA で数値形式を利用する

Glen Alfaro 2023年1月30日
  1. 数値 VBA に NumberFormat プロパティを実装する
  2. VBA 範囲で使用される NumberFormat のタイプを取得する
Excel VBA で数値形式を利用する

数字は私たちの日常生活の中でさまざまな形で現れます。日付、価格、パーセンテージ、分数、小数などがあります。これらはすべて異なって表示される場合がありますが、すべて値を意味します。

Excel と同じように、さまざまな形式の数値を処理できます。時刻と日付を処理する場合は DateTime データ型を使用でき、パーセンテージを処理する場合は Percent を使用できます。

この記事では、Excel VBA の実践全体で数値を利用し、適切に処理するのに役立つ NumberFormat プロパティについて説明します。

数値 VBA に NumberFormat プロパティを実装する

このセクションでは、NumberFormat プロパティを使用して、セルの数値フォーマットを変更します。

構文:

Range.NumberFormat = [FormatCodes]

パラメーター:

Range フォーマットする範囲
[FormatCodes] 使用する数値形式のタイプを表す事前定義された文字列。

[フォーマットコード] マトリックス:

フォーマット名 フォーマットコード 説明
—————– ——————————————————– —————– ——————————————————
一般 General 1234567.89 特定の形式なしで番号を表示する
通貨 $#,##0.00 $1,234,567.89 一般的な金額として表示
番号 0 1234567.89 format は、数値をそのまま表示します
科学的 0.00E+00 1.23E+06 数値を指数形式に変換します
会計 _($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_) $123.00 display the number used in 会計
日にち m/d/yy 11/23/2021 日付と時刻のシリアル番号を表示する
時間 [$-F400]h:mm:ss am/pm 12:00:03 AM 日付と時刻のシリアル番号を表示する
パーセンテージ 0.00% 5.23 % 値をパーセンテージ形式で表示します
分数 # ?/? 1/4 値を小数形式で表示する
特殊 ;; 000-00-0000 リストとデータベースの値で使用される形式

Sheet1 仮想ワークシートは、以下のサンプルコードの以下のすべての例で使用される参照値になります。

Sheet1:

 |    A    |      B      |      C    |
1| 1234.56 | 11/23/2021  | 93249812  |
2| 5       | 0.00004     | 0.25      |

以下のコードブロックは、一般フォーマットを出力します。

Sub FormatGeneral()
Range("A1").NumberFormat = "General"
Debug.Print Range("A1").Text
End Sub

FormatGeneral 出力:

1234.56 

以下のコードブロックは、通貨フォーマットを出力します。

Sub FormatCurrency()
Range("C1").NumberFormat = "$#,##0.00"
Debug.Print Range("C1").Text
End Sub

一般出力:

$93,249,812.00

以下のコードブロックは、Scientific フォーマットを出力します。

Sub FormatScientific()
Range("C1").NumberFormat = "0.00E+00"
Debug.Print Range("C1").Text
End Sub

FormatScientific 出力:

9.32E+07

以下のコードブロックは、アカウンティングフォーマットを出力します。

Sub FormatAccounting()
Range("A1").NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Debug.Print Range("A1").Text
End Sub

FormatAccounting 出力:

 $ 1,234.56 

以下のコードブロックは、日付フォーマットを出力します。

Sub FormatDate()
Range("A2").NumberFormat = "m/d/yy"
Debug.Print Range("A2").Text
End Sub

FormatDate 出力:

1/5/00

以下のコードブロックは、時間フォーマットを出力します。

Sub FormatTime()
Range("B2").NumberFormat = "$-F400]h:mm:ss am/pm"
Debug.Print Range("B2").Text
End Sub

FormatTime 出力:

12:00:03 AM

以下のコードブロックは、パーセンテージフォーマットを出力します。

Sub FormatPercentage()
Range("A1").NumberFormat = "0.00%"
Debug.Print Range("A1").Text
End Sub

FormatPercentage 出力:

123456.00%

以下のコードブロックは、Fraction フォーマットを出力します。

Sub FormatFraction()
Range("C2").NumberFormat = "# ?/?"
Debug.Print Range("C2").Text
End Sub

FormatFraction 出力:

1/4

VBA 範囲で使用される NumberFormat のタイプを取得する

上記の例では、指定された範囲のフォーマットされた値を返しました。このセクションでは、指定された範囲で使用されるフォーマットタイプを取得します。

構文:

Range.NumberFormat

パラメーター:

Range フォーマットタイプを取得するためのセル範囲

引き続き Sheet1 を参照して、以下のコードブロックの例は、指定された範囲で使用されるフォーマットタイプを返すことを示しています。

Sub GetFormattingType()
Debug.Print Range("B1").NumberFormat
End Sub

GetFormattingType 出力:

m/d/yyyy