正と負で書式を分ける

正の値と負の値の場合で書式を分けたい場合があります。よくあるのは負の値の場合は文字を赤くしたり、数値全体を括弧で囲んだり、負を表す「-」記号を△に変更したりといったことです。ここでは Excel VBA で正と負で書式を分ける方法について解説します。

(Last modified: )

正と負で書式を分ける

正の値と負の値の場合で書式を分ける場合には、正の数用の書式と負の数用の書式を用意して、セミコロンで(;)で結んで指定します。

オブジェクト.NumberFormatLocal = "(正の数用の書式);(負の数用の書式)"

例えば負の場合には赤字にする場合は次のようになります。

Range("A1").NumberFormatLocal = "#,##0;[赤]#,##0"

※このように負の値の書式を定義すると、負の値であっても先頭に「-」は付かなくなりますので注意して下さい。

他によくある書式としては次のようになります。

Range("A1").NumberFormatLocal = "#,##0;(#,##0)"
Range("A1").NumberFormatLocal = "#,##0;""△"" #,##0"

正と負とゼロで書式を分ける

正と負だけではなく、ゼロの場合の書式も定義することができます。ゼロの書式も別途用意して、セミコロン(;)で区切って最後に追加します。

オブジェクト.NumberFormatLocal
 = "(正の数用の書式);(負の数用の書式);(ゼロの時の書式)"

ゼロの書式ですので設定できる書式にも限度がありますけど、色を変更したり、他の文字列を表示したりできます。

Range("A1").NumberFormatLocal = "#,##0;(#,##0);[青]0"
Range("A1").NumberFormatLocal = "#,##0;(#,##0);""ZERO"""

サンプルプログラム

では簡単なサンプルで試してみましょう。

Sub テスト()
    
    Range("A1:A4").Value = -123456
    Range("A1").NumberFormatLocal = "#,##0;[赤]#,##0"
    Range("A2").NumberFormatLocal = "#,##0;(#,##0)"
    Range("A3").NumberFormatLocal = "#,##0;""△"" #,##0"
    
    Range("B1:B3").NumberFormatLocal = "#,##0;(#,##0);""ZERO"""
    Range("B1").Value = 1234
    Range("B2").Value = -1234
    Range("B3").Value = 0
    
End Sub

上記マクロを実行すると次のようになります。

数値の書式

-- --

Excel VBA で正と負で書式を分ける方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。