VBAと日々のこぼれ話

  1. VBA

【VBA】現在の日付の表現方法5選

現在の日付をいい感じに取得したい

VBAは、TODAYじゃなくてDATE

ExcelではTODAY関数という直感的に分かりやすいものがあります。
一方、VBAにはTODAY関数はありません。
その代わり、DATE関数で現在日付を取得できます。

ややこしいのは、ExcelのDATE関数とは機能が違います。
またExcel・VBAで共通するものとしてNOW関数があります。
ただしNOW関数は、現在日付+現在時刻と日付以外の情報を含んでいるので、日付だけ取得するにはDATE関数が使いやすいです。

ポイント
TODAY→Excelのみ
DATE →Excel,VBAに存在。動きは違う
NOW →Excel,VBAに存在。動きも同じ

正直、同じ名前で動きが同じ or 同じ名前でも動きが違うのどちらかに寄せてほしい。
今回はDate関数を使った現在日付の表現方法を紹介しています。

小話

私は、TODAY()がExcel関数なのかVBA関数なのか反射的に思い出せません。運よく思い出せてもセルに「=TODAY()」と入力するのもちょっと面倒。
なのでExcelで現在日付を入力したい場合は、ショートカットキーの「[Ctrl]+[;](セミコロン)キー」を使います。

 

前提事項

現在の日付

ここで言っている現在の日付は、マシンのシステム日付のことです。
ですので、システム日付が実日付とずれている場合、以下で説明している関数で取得するのはシステム日付です。

言語と地域のオプション、カレンダー

実は、NOW関数、DATE関数、TIME関数は、マシンの設定によって返り値が変化します。
※Excel関数のTODAY関数も設定によって返り値が変化します。
また、カレンダーの設定がグレゴリオ暦 or イスラム暦であっても変化します。

具体的な例を出します。
現在の日付:2018年4月26日(木)
DATE関数を実行すると、設定によって「2018/04/26」「04/26/2018」「18/04/26」等になる

このようにマシンの設定に依存する関数というのが存在し、同じコードであっても世界中のどのマシンでも同じ動きをするとは限りません。
日本で利用されているマシンのカレンダーは、グレゴリオ暦が多いと思います。しかし、日付の形式はマシンの持ち主が使いやすいように変更していることが多いのでご注意を。

今回紹介するものは定数利用のものをあまり載せていないので影響は少ないです。
ですが、頭の片隅にでも知っておいた方が良いですね。

【スポンサーリンク】



 

現在の日付の表現方法5選

イミディエイトウィンドウへの表示用に作成しているので、「Debug.Print」を外して使用してくださいね。

表示結果

2018/4/30にサンプルコードを実行すると、イミディエイトウィンドウへの表示は以下の通り。

‘現在の日付
2018/04/30
‘[/](スラッシュ)区切り
2018/04/30
‘年月日
2018年4月30日
‘[-](ハイフン)区切り
18-04-30
‘元号付(上から)
平成30年4月30日
平30年4月30日
H30.04.30
‘曜日付(上から)
4/30(月)
4/30(Mon)

 

紹介しているコードはいずれも同じ動きです。

Date関数で現在の日付を取得
書式の整える

 

この書式の整え方は枚挙に暇がないので、よく使いそうなものを挙げています。
リクエスト頂ければ、追加することもあります。

 

ポイント
Format関数・FormatDateTime関数で利用している定数は、前提事項に挙げた「地域と言語のオプション」の設定に依存するので注意。書式を固定したいのであれば、Format関数で書式を「yyyy/mm/dd」等で設定してあげると良いかと思います。
元号付きのものは、2019年の今上陛下の譲位でパッチが当たる(新元号が追加)がされるんだろうと推測されますが、タイムラグがあるのかないのかちょっと気になります。

 

【スポンサーリンク】



より安定した現在の日付が欲しい人のために

おまけです。

 

イミディエイトウィンドウへの表示は、

2018/04/30
2018年4月30日
平成30年4月30日
4/30(月)

 

この方法は、Date関数で日付を現在の日付を取得するところは同じです。
違うのは、Date関数の返り値を直接整えるかそうではないかです。

おまけでは、年月日毎に個別で返り値を取得し自分で日付を作成。
その日付に対して書式を整えることでマシンの日付形式の設定に依存しません。よって書式が安定します。
また使用したYear関数・Month関数・Day関数は日付の判定によく使われますが、より安定した現在の日付が欲しい人にも向いています。
(カレンダーの影響はシステム日付を取得している限り受けます)

VBAの最近記事

  1. Excelシートの最終行を取得したい その1

  2. 【VBA】未だに苦手としていること

  3. 【VBA】モジュール先頭に記述する4種類のOption キーワード ステートメント

  4. 【VBA】同じ階層体系のフォルダを量産したい

  5. VBAの腕を知るための3つの短い質問を考える

関連記事

【スポンサーリンク】




PAGE TOP