[VBA] 日付型変数 (Date) 日付シリアル値を格納します

 日付型変数 (Date) について解説します。他のデータ型に比べて、この日付型変数というのは書き方が色々あるので、注意しなくてはいけない点がたくさんあります。色々な書き方に惑わされずに「とにかく正式な書き方以外はしない!」と決めておいたほうが無用なトラブルを防ぐことができます。

変数のデータ型⑦ 日付型変数 (Date)

 日付型変数 (Date) は "" で囲んだ文字列や # で囲んだ日付リテラル値を 日付シリアル値 に変換して格納します。日付リテラル値というのは VBA が内部的に日付だと解釈できる文字のことです。VBA の日付リテラル値はアメリカ式に #Month/Day/Year# で記述することが正式となっています。
 

日付リテラル値で記述する方法

 まずは日付リテラル値をそのまま日付型変数に入れるマクロを書いてみます。

 '日付リテラル値を日付型変数に入れます

 Sub DateTest1()

  Dim mydate As Date

  mydate = #11/27/2017 10:45:20 PM#

  Debug.Print mydate

 End Sub

 マクロを実行すると次のように表示されます。

 2017/11/27 22:45:20

 冒頭でも言いましたけど、日付リテラル値で記述する場合は、この形式以外の書き方をしないほうがいいです。
 

文字列で記述する方法

 日付を文字列で記述して格納することもできます。

 '文字列を日付型変数に入れます

 Sub DateTest2()

  Dim mydate As Date

  mydate = "2017/11/27 22:45:20"

  Debug.Print mydate

 End Sub

 マクロを実行すると次のように表示されます。

 2017/11/27 22:45:20

 ただし、文字列で日付を記述してしまうと思わぬトラブルが発生する可能性があります。それについては以下の説明をお読みくださいな。
 

リテラル値と文字列どちらを使うべき?

 リテラル値で記述されたマクロは、どのような環境にあっても正確に日付シリアル値に変換してくれるので動作がおかしくなることはありません。しかし文字列で日付を記述してしまうと、たとえば OS が Month/Day/Year の表記を強制するような設定になっていた場合、"2017/11/27 22:45:20" のような記述が正しいシリアル値に変換されない可能性があります。なので、できる限り日付リテラル値で記述することをおすすめします。
 

シリアル値とは?

 ここまで何度も登場した「シリアル値」とはいかなるものかについて簡単に説明しておきます。シリアル値とは「1899 年 12 月 30 日を 0 として、以降 1 日経過するごとに 1 ずつ増えていく数のことです(時刻は小数部分になります)。ですから日付型変数には「数値」を入れてもかまわないのです。実際にちょっと試してみましょう。

 'シリアル値 0 と 1 の日付を調べます

 Sub DateTest3()

  Dim mydate1 As Date
  Dim mydate2 As Date

  mydate1 = 0
  mydate2 = 1

  Debug.Print mydate1
  Debug.Print mydate2

 End Sub

 このマクロを実行すると、シリアル値 0 と 1 に対応する日付が

 0:00:00
 1899/12/31

と表示されます。逆に日付型変数に格納された値を Double などに入れるとシリアル値が返ってきます。

 '2017/11/27をシリアル値で表示します

 Sub DateTest4()

  Dim mydate As Date
  Dim x As Double

  mydate1 = #11/27/2017#
  x = mydate1

  Debug.Print x

 End Sub

 マクロを実行すると 43066 という値が表示されます。
 

Date 型で指定できる日付の範囲

 日付型変数には「西暦 100 年 1 月 1 日 ~ 西暦 9999 年 12 月 31 日 の日付」および「0:00:00 ~ 23:59:59 の時刻」を入れることができます。この範囲を超える日付、あるいは存在しない日付のリテラル値は記述した瞬間にコンパイルエラーが発生します。

 現在の日付や時刻を日付型データに格納するときは Date 関数や Now 関数などを用います。それらの関数ついては 現在の日付と時刻の取得 の記事を参照してください。

 ≫ VBA 辞典メニューに戻って他の記事も読んでくださいな~♪

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください