対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016
VBA(Visual Basic for Applications)のFormat関数を使うと、日付データの日付部分を2桁の書式にした文字列を取得できることをご紹介しました。
「Format(ActiveCell.Value, "dd")」といったコードで、アクティブセルに入力されている日付データの日付部分だけをdd形式の2桁の文字列として取得できますが、この2桁の文字列をセルに代入する場合、考えるべきことが増えます。
[スポンサードリンク]
2桁の日付をセルに入力しようとして上手く動かないサンプルマクロ
例えば「2017/5/5」という日付データの入力されたセルがアクティブなときに、書式設定が初期状態である右隣のセルに、「05」という2桁の日付が入力されることを期待して以下のSubプロシージャを実行すると、「5」が入力されてしまいます。
Sub 日付部分を取得して右隣のセルへ_ダメな例()
ActiveCell.Offset(0, 1).Value = Format(ActiveCell.Value, "dd")
End Sub
ActiveCell.Offset(0, 1).Value = Format(ActiveCell.Value, "dd")
End Sub
Excelでは、書式を設定していないセルに、ハイフンなしの電話番号を市外局番から入力したようなときには、先頭の「0」がなくなってしまいます。
同じことが起きたわけです。
表計算ソフトであるExcelは、数値とみなし得る文字列は自動的に数値と判断します。
このExcelの仕様は、VBAからセルにデータを入力する際も関係します。
2桁の日付をセルに入力するサンプルマクロ
以下のようなSubプロシージャにすればアクティブなセルの右隣のセルに、アクティブセルの日付データの日付部分だけを2桁にした文字列を入力できます。
Sub 日付部分を取得して右隣のセルへ()
ActiveCell.Offset(0, 1).NumberFormatLocal = "@"
ActiveCell.Offset(0, 1).Value = Format(ActiveCell.Value, "dd")
End Sub
ActiveCell.Offset(0, 1).NumberFormatLocal = "@"
ActiveCell.Offset(0, 1).Value = Format(ActiveCell.Value, "dd")
End Sub
先頭についた数字の「0」を残すためには、[セルの書式設定]ダイアログなどで
文字列書式を設定します。
VBAから操作する場合も同じことです。
RangeオブジェクトのNumberFormatLocalプロパティに、「@」(アットマーク)を指定しておけば、文字列書式が設定されて、Format関数で返された「05」のような文字列をそのまま入力できます。
[スポンサードリンク]
Home » Excel VBA Rangeオブジェクト » 表示形式 » VBAで2桁の日付をセルに入力する