Home » ExcelVBA Rangeオブジェクト » 表示形式 » NumberFormatLocalとNumberFormatの違い


NumberFormatLocalとNumberFormatの違い

対象:Excel2003, Excel2007, Excel2010, Excel2013

NumberFormatLocalとNumberFormatの違い

ExcelのVBA(Visual Basic for Applications)では、NumberFormatLocalプロパティで、数値の表示形式を指定できることをご紹介しました。

NumberFormatLccalプロパティを知った方からいただく、定番の質問があります。

「NumberFormatLocalプロパティとNumberFormatプロパティは何が違うのですか?」
というご質問です。

NumberFormatLocalとNumberFormatは、ほとんど同じ表示形式を指定できるのですが、一部異なるものがあります。

[スポンサードリンク]

具体的に何が違うかですが、「\」(円マーク)を使う表示形式と、色の指定と、「G/標準」が違います。

もっと違いがあると思いますが、実務上問題になりそうなのはこの3つでしょう。


▼NumberFormatプロパティを使うときに注意すべき点
「\」(円マーク)を表示するには「"」(ダブルクォート)で括る
色を指定するときには漢字ではなく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"」
と指定する必要があります。

サンプル

現物を見ないで説明だけを読んでも、わかり辛い内容ですので、サンプルファイルをご用意しました。

▼サンプルファイル(28KByte)ダウンロード

サンプルファイルには以下のマクロが作ってありますので、まずは実行してください。


Sub NumberFormatLocalとNumberFormatの比較表を作成する()
' 見出し行の作成
 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"

' NumberFormatで色の指定が日本語でできない例
 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 » ExcelVBA Rangeオブジェクト » 表示形式 » NumberFormatLocalとNumberFormatの違い

TrackBack:3

TrackBack URL
VBAで2桁の日付をセルに入力する from インストラクターのネタ帳
VBAのFormat関数で2桁にした日付をセルに代入する際には、セルの書式設定を行う必要があります。
VBAで小数点以下を表示する from インストラクターのネタ帳
小数点以下まで表示するRange.NumberFormatLocalプロパティの指定を行うサンプルをご紹介しています。
VBAで数式が文字列になってしまう from インストラクターのネタ帳
Range.Formulaプロパティを使って数式を入力したつもりが、文字列になってしまう場合について解説しています。

Home » ExcelVBA Rangeオブジェクト » 表示形式 » NumberFormatLocalとNumberFormatの違い

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

.