0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBA学習備忘録_07_VBAの日付取得に関する諸注意

0
Last updated at Posted at 2026-02-07

の続き


注意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
>>>18991231000000

Sub sample2()
    MsgBox Format(1, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>190011000000

注意3 「/」が時折、割り算の演算子とみなされてしまっている場合がある。

Sub Format関数sample1()
    MsgBox Format(2026 / 2 / 1, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>1902109000000

このような場合、最初の引数の2026 / 2 / 1は2026年2月1日ではなく「2026÷2÷1」で、結局注意2の日を起算日として1013日後の日付が取得される


数値を含む文字列を正しく日付型(型指定文字は「Date」)の値としてVBAに認識させるには??

(1)DateSerial関数を以下のようにはさむ

DateSerial関数

Sub Format関数sample2()
    MsgBox Format(DateSerial(2026, 2, 1), "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>202621000000

(2)NOW関数をはさむ(ただし、今日の日付を基準とする場合)

Sub Format関数sample3()
  Dim 日付 As Date
  Range("A1") = Now
  日付 = Range("A1")
      MsgBox Format(日付, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>マクロ実行時の日付日時のメッセージボックス

上のコードでDateSerial(日付)とすると、「引数が足りない」ことを示すエラーメッセージが出る

実際のエラーの様子

image.png

image.png

(3)数値を含む文字列が日付であることを明示させる記法:日付リテラル(文字列を「#」で囲む)を使用する

Sub Format関数sample4()
    MsgBox Format(#2026/2/1#, "yyyy年mm月dd日hh時mm分ss秒")
End Sub
>>>202621000000

Office2024以降の場合、デフォルトの状態ではセルの書式が「標準」であっても、セル内にxxxx/y/zと「/」を使って書くと自動的にセルの書式は「日付」になりました。(※筆者PCはWindows11)

DateSerial関数

引数に年・月・日を表す数値を指定すると、それからシリアル値(注意1を起算日とする正の整数値を見かけ上Date型の値で表示したもの)を作成する関数
※以下の画像のように

image.png

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 ベーシック テキスト&問題集

Amazonリンク

https://www.amazon.co.jp/%E3%81%93%E3%81%AE1%E5%86%8A%E3%81%A7%E5%90%88%E6%A0%BC-%E6%B0%B8%E4%BA%95%E9%9B%85%E6%98%8E%E3%81%AEExcel-VBA-%E3%83%99%E3%83%BC%E3%82%B7%E3%83%83%E3%82%AF-%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88/dp/4046071524?tag=googhydr-22&source=dsa&hvcampaign=books&gad_source=1

②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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?