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