の続き
注意1
VBAのFormat関数による日付取得は〇〇日後というフォーマットで書いた場合、「0」は「1899年12月30日00時00分00秒」である。
sample
Sub sample1()
MsgBox Format(0, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
注意2
VBAのFormat関数による日付取得は〇〇日後というフォーマットで書いた場合、〇〇が数値なら「0」を起点とした「通算日数」方式である
sample
Sub sample2()
MsgBox Format(1, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>1899年12月31日00時00分00秒
Sub sample2()
MsgBox Format(1, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>1900年1月1日00時00分00秒
注意3 「/」が時折、割り算の演算子とみなされてしまっている場合がある。
Sub Format関数sample1()
MsgBox Format(2026 / 2 / 1, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>1902年10月9日00時00分00秒
このような場合、最初の引数の2026 / 2 / 1は2026年2月1日ではなく「2026÷2÷1」で、結局注意2の日を起算日として1013日後の日付が取得される
(1)DateSerial関数を以下のようにはさむ
Sub Format関数sample2()
MsgBox Format(DateSerial(2026, 2, 1), "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>2026年2月1日00時00分00秒
(2)NOW関数をはさむ(ただし、今日の日付を基準とする場合)
Sub Format関数sample3()
Dim 日付 As Date
Range("A1") = Now
日付 = Range("A1")
MsgBox Format(日付, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>マクロ実行時の日付日時のメッセージボックス
上のコードでDateSerial(日付)とすると、「引数が足りない」ことを示すエラーメッセージが出る
(3)数値を含む文字列が日付であることを明示させる記法:日付リテラル(文字列を「#」で囲む)を使用する
Sub Format関数sample4()
MsgBox Format(#2026/2/1#, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>2026年2月1日00時00分00秒
Office2024以降の場合、デフォルトの状態ではセルの書式が「標準」であっても、セル内にxxxx/y/zと「/」を使って書くと自動的にセルの書式は「日付」になりました。(※筆者PCはWindows11)
DateSerial関数
引数に年・月・日を表す数値を指定すると、それからシリアル値(注意1を起算日とする正の整数値を見かけ上Date型の値で表示したもの)を作成する関数
※以下の画像のように
Sub sample()
Dim d As Date
d = DateSerial(1899, 12, 31)
Debug.Print d ' 表示上は日付
Debug.Print CDbl(d) ' 内部のシリアル値を数値で確認
End Sub
を実行すると、イミディエイトウィンドウに
1899/12/31
1
と表示される
上の画像の通りDateserial関数の引数は年月日を表す正の整数のため、
DateSerial(NOW)とかDateSerial(2026,0,0)(※正の整数以外の引数での使用)は
引数エラーになる
主な参考資料
①この1冊で合格! 永井雅明のExcel VBA ベーシック テキスト&問題集
②Microsoft公式 Format関数
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/format-function-visual-basic-for-applications
③エクセルの神髄 第45回.VBA関数(Format)
https://excel-ubara.com/excelvba1/EXCELVBA345.html
④【Excel VBA】DateSerial関数|年・月・日から日付を作成する方法と注意点 @kato-ata in 株式会社アトアグランスさんQiita
https://qiita.com/kato-ata/items/78ca620c34a4db41c270
⑤Microsoft公式 DateSerial 関数
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/dateserial-function
⑥Microsoft公式 Date データ型
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/date-data-type


