日付と時刻

VBA 日付(西暦・和暦)と時刻を求める

 日付および時刻に関してはいろいろな関数が準備されています。

これらを使って今日の日付を表したり、今現在の時刻や年・月・日を数値で表したりと、様々な活用をしますので、しっかり学び取ることが求められます。

現在の日付・時刻を求めるには

 現在の日付と時刻を求めるには次の関数を使います。

現在のシステム日付 = Date 関数

現在のシステム時刻 = Time 関数

現在のシステム日付と時刻 = Now 関数

※ いづれの関数も「引数」は取りません。

ここで聞きなれない言葉あります。

システム日付・システム時刻の「システム」がどういう意味か、気になります。

コンピューターのカレンダーが示す日付と時刻のことです。

 ですから、実際の日付が「2021年12月5日 午前8時ちょうど」なのに、もしコンピュータが「2021年12月4日午前8時」になっていたら、システム日付は「2021年12月4日」ということになります。

Sub 日付時刻()

  Range(“B2”) = “現在:” & Now

  MsgBox “今日は” & Date & Chr(10) & “時刻は” & Time

 End Sub

※ Chr(10) は「改行」を表します。

  MsgBox “今日は” & Date & “時刻は” & Time

  のように Chr(10) を外せば、

  メッセージ文は「今日は2021/10/05時刻は19:55:13」と一行表示されます。

年・月・日を求める

 現在の年月日は「Date関数」を使って取得することは既に学習しました。

ここでは年月日から「年」「月」「日」を取り出すことを解説します。

その他「和暦表示」についても解説します。

日付を代入する変数の型は 日付型の「Date」となります。

Dim DT as Date
 DT=#2021/10/18#

のように年月日は「#」で囲むことになっています。

ところがこのままエンターを押すと

Dim DT as Date
 DT=#10/18/2021#

に変わってしまいます。

「#月 / 日 / 年 #」 の形なので私達にはなじみがありませんが、VBAではそうなっています。

これを文字列のように「”」で囲むこともできます。

DT=”2021/10/18″

この場合は普通に「”年/月/日”」のままです。

DTがDate つまり日付型であれば「日付」として認識されます。

Sub hizuke()

 Dim DT As Date ‘①

 Dim nen As Long ‘②

 Dim tsuki As Long ‘③

 Dim hi As Long ‘④

 DT = “2021/10/1″ ’⑤

 nen = Year(DT) ‘⑥

 tsuki = Month(DT) ‘⑦

 hi = Day(DT) ‘⑧

 Range(“A1”) = nen & “年”

 Range(“B1”) = tsuki & “月”

 Range(“C1”) = hi & “日”

End Sub

① 年月日を入れる変数 データ型は日付

② 「年」を入れる変数 データ型は数字

③ 「月」を入れる変数 データ型は数字

④ 「日」を入れる変数 データ型は数字

⑤ 年月日 (2021/10/1) をDTに入れる。

  あえてここでは「 ” 」を使っています。

⑥ Year関数は日付から西暦での「年」を取り出す関数です。

⑦ Month関数は日付から「月」を取り出す関数です。

⑧ Day関数は日付から「日」を取り出す関数です。

「年」 Year( “xxxx/xx/xx”)

「月」 Month(“xxxx/xx/xx”)

「日」 Day(“xxxx/xx/xx”)

この3つの関数は大切です。

日付は「シリアル値」で管理されている

 #・・# で囲まれた日付(時刻を含みます)は「シリアル値」と呼ばれる数字で管理されています。

 「シリアル値」とは、1900年1月1日 を「1」としてここから1日増すごとに数字(シリアル値)が1つづつ増加します。

要するに、1900年1月1日から何日経過しているかを表す数値です。

ですからシリアル値「2.5」は 1900年1月2日 12:00 ということになります。

 今日の日をシリアル値で言われても理解しにくいですよね。

ですから「#」で囲って、普段の年月日を入力すれば、あとはVBAの方でシリアル値に自動変換する仕組みになってます。

上記の例では、 DT = #10/1/2021#  (“2021/10/1”) ですので、

DT – 1

は 2021年10月1日の前日、つまり 2021年9月30日 を表すことになります。

シリアル値で考えれば、反対にわかりやすいです。

和暦での表示

 和暦から西暦への使用にシフトしている昨今ですが、まだまだ和暦は生活の中で大きな比重を占めているのは事実です。

 VBAでは Time関数 や Now関数を使っても西暦で表示されます。

これを和暦に変換する方法を解説します。

解説と言いましても、ただ下記の通り実践するだけです。

Sub warekii()

  Dim DD As Date

  ‘西暦の年月日をDDに代入

  DD = Range(“C2”).Value

  Range(“C5”) = DD

  Range(“C6”) = Format(DD, “ggge年”)

  Range(“C7”) = Format(DD, “gggee年”)

  Range(“C8”) = Format(DD, “ggge年m月d日”)

End Sub

別に

Range(“C6”) = Format(DD, “ggge年”)

Range(“C6”).NumberFormatLocal = “ggge年”

Range(“C6”) = DD

と書く方法もあります。

時・分・秒を求める

現在時間は「Time関数」や「Now関数」から求められます。

ここではその時間から「時」・「分」・「秒」の取り出し方を学びます。

Sub jikan()

  Dim TM As Date ‘

  Dim Ji As Long ‘②

  Dim Fun As Long ‘③

  Dim Byo As Long ‘④

  TM = Time ‘⑤

  Ji = Hour(TM) ‘⑥

  Fun = Minute(TM) ‘⑦

  Byo = Second(TM) ‘⑧

  Range(“C3”) = TM

  Range(“C4”) = Ji

  Range(“C5”) = Fun

  Range(“C6”) = Byo

End Sub

① 現在時を入れる変数 データ型は 日付(Date)

② 「時」を入れる変数 データ型は 数字(Long)

③ 「分」を入れる変数 データ型は 数字(Long)

④ 「秒」を入れる変数 データ型は 数字(Long)

⑤ 現在時をTMに入れる

⑥ 現在時から「時」を取り出す(Hour関数)

⑦ 現在時から「分」を取り出す(Minute関数)

⑧ 現在時から「秒」を取り出す(Second関数)

上記の通り、時・分・秒を取り出すには

 時 = Hour( “時間” )

 分 = Minute( “時間” )

 秒 = Second( “時間” )

それぞれの関数を使うことにより取り出せます。

これも基本的なことですので、使えるようになってください。

24時間表示

なお、ここで上記の「Time関数」で現在の時間を取得しています。

「5:43:03 PM」と AM・PMを使った12時間の表示になっています。

Hour関数で取り出した時間は、24時間での表示がなされます。

当然 、現在時間も24時間表示にしたい場合があります。

Sub jikan2()

  Dim TM As Date

  TM = Time

  ‘①

  Range(“C11”).NumberFormatLocal = _

  “h:mm:ss AM/PM”

  Range(“C11”) = TM

  ‘②

  Range(“C12”).NumberFormatLocal = _

  “h:mm:ss”

  Range(“C12”) = TM

End Sub

① AM・PM付きの12時間表示にする場合

  Excelではデフォルトではこれを書かなくてもこの表示になります。

② 24時間表示にしたい場合、このように書き入れます。

 

24時間表示にしたい場合は、セルに直接設定することもできます。

・時間を表示させたいセルを選択して右クリック

・セルの書式設定(F) をクリック

・分類C) から時刻を選んで 13:30:55 の24時間制の表示を選択してOKを押す

参考までに

 Excelではデフォルトの状態では AM・PM付きの12時間制で表示すると申しましたが、

MsgBox では 24時間制で表示されます。

上記の例  MsgBox TM   ➡ 18:15:34

VBA 日付から曜日を求める  和暦を表示するのに Format を使いましたが、日付から曜日を取得するにも、Format関数を使うと便利です。  このほかに...