ExcelのVBA(Visual Basic for Applications)では、NumberFormatLocalプロパティで、数値の表示形式を指定できることをご紹介しました。
NumberFormatLccalプロパティを知った方からいただく、定番の質問があります。
「NumberFormatLocalプロパティとNumberFormatプロパティは何が違うのですか?」
というご質問です。
NumberFormatLocalとNumberFormatは、ほとんど同じ表示形式を指定できるのですが、一部異なるものがあります。
具体的に何が違うかですが、「\」(円マーク)を使う表示形式と、色の指定と、「G/標準」が違います。
もっと違いがあると思いますが、実務上問題になりそうなのはこの3つでしょう。「\」(円マーク)を表示するには「"」(ダブルクォート)で括る
色を指定するときには漢字ではなくAlphabetで指定する
標準書式を指定するときは「G/標準」ではなく「General」と指定する
\を表示する
例えば「\10,000」「\-10,000」といった表示にしたいときに、NumberFormatLocal の場合は
「"\#,##0; \-#,##0"」
と指定します。
この指定をNumberFormatに行ったときに
「10000」は「#,1000」と
「-10000」は「-10,000」と
表示されてしまいます。
NumberFormatで「\」を正しく表示するには
「"""\""#,##0; ""\""-#,##0"」
と指定する必要があります。
文字の色を指定する
桁区切りカンマを入れてマイナスの値のときに赤色で表示したいときには、NumberFormatLocal の場合は
「"#,##0; [赤]-#,##0"」
と指定します。
この指定をNumberFormatに指定したときには、実行時エラーが発生します。
NumberFormatでは「[赤]」ではなく「[Red]」と指定してください。
G/標準を指定する
標準の表示形式にしたいときには、NumberFormatLocal の場合は
「"G/標準"」
と指定します。
この指定をNumberFormatに指定したときには、「g/"標""準"」という残念な表示形式が設定されてしまいます。
NumberFormatで正しく標準を指定したい場合は
「"General"」
と指定する必要があります。
サンプル
現物を見ないで説明だけを読んでも、わかり辛い内容ですので、サンプルファイルをご用意しました。
サンプルファイルには以下のマクロが作ってありますので、まずは実行してください。
' 見出し行の作成
Columns("B:D").ColumnWidth = 25
With Range("A1:D1")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
Range("A1").Value = "元データ"
Range("B1").Value = "NumberFormatLocalを指定"
Range("C1").Value = "NumberFormatを指定" & vbLf & "NumberFormatLocalと同じ"
Range("D1").Value = "NumberFormatを指定" & vbLf & "正しく表示させる指定"
' 元データと数式の入力
Range("A2:A4").Value = -10000
Range("B2:D4").FormulaR1C1 = "=RC1"
' NumberFormatで「\」が表示できない例
Range("B2").NumberFormatLocal = "\#,##0; \-#,##0"
Range("C2").NumberFormat = "\#,##0; \-#,##0"
Range("D2").NumberFormat = """\""#,##0; ""\""-#,##0"
Range("B3").NumberFormatLocal = "#,##0; [赤]-#,##0"
'Range("C3").NumberFormat = "#,##0; [赤]-#,##0" '← アンコメントするとエラーになります
Range("D3").NumberFormat = "#,##0; [Red]-#,##0"
' NumberFormatで「G/標準」を指定できない例
Range("B4").NumberFormatLocal = "G/標準"
Range("C4").NumberFormat = "G/標準"
Range("D4").NumberFormat = "General"
End Sub
上記のマクロを実行すると「-10000」というデータに、NumberFormatLocalプロパティで表示形式を指定した例(B列)、NumberFormatプロパティでNumberFormatLocalと同じ指定をして変な表示となる例(C列)、NumberFormatプロパティを正しく指定した例(D列)が作成されます。
[セルの書式設定]ダイアログ-[表示形式]タブでどのような書式が設定されているかと、VBAのコード上でどう指定さられているのかをご確認ください。
「Range("C3").NumberFormat = "#,##0; [赤]-#,##0"」
は、実行時エラーとなってしまうのでコメントアウトしてあります。
どんなエラーが出るかを確認したい方はアンコメントしてからマクロを実行してみてください。
日本語環境だけで使うのなら、NumberFormatプロパティより、[セルの書式設定]ダイアログ-[表示形式]タブと同じ指定ができるNumberFormatLocalプロパティを使うほうが、やっぱり便利です。
Home » Excel VBA Rangeオブジェクト » 表示形式 » NumberFormatLocalとNumberFormatの違い