表示形式の設定


セルの表示形式は、RangeオブジェクトのNumberFormatLocalプロパティに表示形式文字列を設定します。表示形式文字列とは、[セルの書式設定]ダイアログボックスの[表示形式]タブで、ユーザー定義の表示形式を設定するときに使用する文字列です。表示形式文字列にはどんな種類があるかは・・・ヘルプなどでご確認ください。わからないときは、とりあえず望みの表示形式を手作業で設定し、その操作をマクロ記録してください。たとえば、セルA1に通貨形式の表示形式を設定する操作を記録したのが次のコードです。

Sub Macro1()
    Selection.NumberFormatLocal = "\#,##0;\-#,##0"
End Sub

この「"\#,##0;\-#,##0"」をNumberFormatLocalプロパティに設定すれば、とりあえず通貨形式の表示形式にできます。

セルの表示形式を設定するときは、同時にセルに何らかのデータを入力するものです。データを入力してから表示形式を設定しても、逆に表示形式を設定してからデータを入力しても同じです。ただし、「0123」のようなデータを文字列として入力したいようなケースでは、先に表示形式を設定しなければなりません。

Sub Sample1()
    With Range("A1")
        .NumberFormatLocal = "@"
        .Value = "0123"
    End With
End Sub

また、入力すると自動的に表示形式が設定される日付データでも、あらかじめ表示形式が設定されているセルの場合はExcelが自動的に設定することはありません。先に設定している表示形式が有効になります。

Sub Sample2()
    With Range("A1")
        .NumberFormatLocal = "ggge年m月d日"
        .Value = Now
    End With
End Sub

Nowは、現在の日時を返す関数です。

あと、もうひとつ。下のような表があったとします。新しいデータを、どんどん下に追記していくようなケースです。

新しいデータには、毎回表示形式を設定しなければなりませんね。表示形式を設定しないと、次のようになってしまいます。

Sub Sample3()
    With Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 0) = "土屋"
        .Offset(1, 1) = "2010/1/9"
        .Offset(1, 2) = "1234"
    End With
End Sub

こんなとき、毎回B列とC列に表示形式を設定してもいいんですが、

Sub Sample4()
    With Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 0) = "土屋"
        With .Offset(1, 1)
            .Value = "2010/1/9"
            .NumberFormatLocal = "m月d日"
        End With
        With .Offset(1, 2)
            .Value = "1234"
            .NumberFormatLocal = "#,##0円"
        End With
    End With
End Sub

セルの表示形式は、ほかのセルからコピーすることも可能です。

Sub Sample5()
    With Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 0) = "土屋"
        With .Offset(1, 1)
            .Value = "2010/1/9"
            .NumberFormatLocal = .Offset(-1, 0).NumberFormatLocal
        End With
        With .Offset(1, 2)
            .Value = "1234"
            .NumberFormatLocal = .Offset(-1, 0).NumberFormatLocal
        End With
    End With
End Sub

どちらが優れいているということではありませんが「表示形式をコピーする」という発想を持っていると、何かのときに役立ちます。