【VBA入門】日付を扱う方法(取得、書式変換、比較、計算、チェック)

Date型って使っていますか?

日付データの足し算、引き算、比較など日付を扱いたい場合に使うと便利です。VBAではこれらを扱うための関数が用意されています。

この記事では、日付の扱い方について

  • Date(日付)型とは
  • 日付・時刻を取得する方法
  • Date型の扱い方
  • Format関数で書式を指定して変換する

など基本的な内容から、応用的な内容についても解説していきます。

今回は日付の扱い方について、使い方をわかりやすく解説します!

Date(日付)型とは

VBAでは日付型というデータ型が用意されています。

日付型では日付と時刻の両方を扱います。日付型を使うと、日付の比較や加算、引き算などの計算ができて便利です。

日付型の値の範囲は、西暦100年1月1日 ~ 西暦9999年12月31日 の日付と時刻となっています。

日付型を記述する際には日付を「#」記号で囲みます。

書式は、

#月/日/年 時:分:秒#

です。

サンプルコードで確認しましょう。

実行結果:
date02

文字列からDate型への自動変換

先ほどは日付型を記述する際に「#」記号で囲む、とお伝えしました。

でも、この書式は少々見づらいですので、文字列のように「」記号で囲むこともできます。文字列を日付型に代入すると、自動で日付型に変換されることになります。

サンプルコードで確認しましょう。

実行結果:
date02

日付・時刻を取得する方法

VBAでは日付、時刻、日付と時刻の両方を取得する関数が用意されています。

現在の日付を取得するには、Date関数を使います。現在の時刻を取得するには、Time関数を使います。日付と時刻の両方を取得するには、Now関数を使います。

Date関数、Time関数、Now関数のいずれも戻り値はDate型です。引数はありません。

サンプルコードで確認しましょう。

実行結果:
date01

年、月、日、時、分、秒、曜日を取得する

年、月、日を取得するには、それぞれYear関数Month関数Day関数を使用します。

時、分、秒を取得するには、それぞれHour関数Minute関数Second関数を使用します。

曜日を取得するには、Weekday関数を使用します。

サンプルコードで確認しましょう。

実行結果:
date04

Date型の扱い方

Date型を使うと、日付の比較や加算、引き算などの計算ができて便利です。

詳しくみていきましょう。

日付を比較する方法

Date型を使うと、「>」や「<」などの比較演算子で比較することができます。

サンプルコードで確認しましょう。

実行結果:
date03

日付を計算する方法

Date型であれば、日付の加算、引き算の計算をすることもできます。

「+」、「-」などの算術演算子で計算することもできますが、VBAで用意されているDateAdd関数を使うと細かい設定ができて便利です。

算術演算子で計算する方法

算術演算子「+」、「-」を使って、数値の加算、引き算のように日付を計算することができます。

サンプルコードで確認しましょう。

実行結果:
date05

DateAdd関数で計算する方法

指定した時間間隔を加算した日付を取得するには、DateAdd関数を使用します。

DateAdd関数は日付をバリアント型の値で返します。

以下のように記述します。

引数intervalは追加する時間間隔を書式で指定します。

引数numberは追加する時間間隔の値を指定します。正の値を指定すると先の日時が取得できますし、負の値を指定すると過去の日時を取得することができます。

引数dateは時間間隔を追加する日付型の値を指定します。引数intervalを指定する書式は以下のとおりです。

書式説明
yyyy
q四半期
m
y年間通算日
d
w平日
ww
h
n
s

サンプルコードで確認しましょう。

実行結果:
date06

日付の間隔を取得する方法

日付の間隔を取得する場合は、DateDiff関数を使います。

DateDiff関数は日付をバリアント型の値で返します。

「[ ]」内は省略することができます。

引数intervalは計算する時間間隔を書式で指定します。引数intervalを指定する書式はDiffAdd関数と同じですので、そちらを参照してください。

引数date1、date2は計算の対象となる2つの日付の値を指定します。引数firstdayofweekは、週の始まりの曜日を定数で指定します。

省略可能で省略すると、日曜日を指定したことになります。引数firstweekofyearは、年の第1週を定数で指定します。

省略可能で省略すると、1月1日を含む週を第1週と指定したことになります。引数firstdayofweekの設定は次のとおりです。

定数説明
vbSunday1日曜日(デフォルト値)
vbMonday2月曜日
vbTuesday3火曜日
vbWednesday4水曜日
vbThursday5木曜日
vbFriday6金曜日
vbSaturday7土曜日

引数firstweekofyearの設定は次のとおりです。

定数説明
vbFirstJan111 月 1 日が含まれる週から開始(デフォルト値)
vbFirstFourDays24 日以上が含まれる最初の週が年の第 1 週目
vbFirstFullWeek31 週間全体が含まれる最初の週がその年の第 1 週目

使い方をサンプルコードで確認しましょう。

実行結果:
date07

時間の初めからの経過時間を取得する方法

例えば、年の初めや月の初めからの経過日数や日の初めからの経過時間など、時間の初めからの経過時間を取得するには、DatePart関数を使用します。

「[ ]」内は省略することができます。

引数intervalは計算する時間間隔を書式で指定します。引数intervalを指定する書式はDiffAdd関数と同じですので、そちらを参照してください。

引数dateは評価する日付型の値を指定します。引数firstdayofweek、firstweekofyearは、DateDiff関数と同じですので、そちらを参照してください。

サンプルコードで確認しましょう。

実行結果:
date08

日付の妥当性をチェック判定する方法

有効な日付かチェックしたい場合には、IsDate関数を使用します。

引数に評価する日付型か文字列を指定します。日付に変換できる場合はTrueを、変換できない場合はFalseを返します。

サンプルコードで確認しましょう。

実行結果:
date09

文字列を日付データに変換する方法

文字列を日付データに変換するにはDateValue関数を使用します。

また、時刻データに変換するにはTimeValue関数を使用します。

サンプルコードで確認しましょう。

実行結果:
date10

シリアル値に変換する方法

年、月、日を指定して日付を意味するシリアル値を取得したい場合は、DateSerial関数を使用します。

また、時、分、秒を指定して時刻を意味するシリアル値を取得したい場合は、TimeSerial関数を使用します。

サンプルコードで確認しましょう。

実行結果:
date10

Format関数で書式を指定して変換する

これまで日付の表示には「/」記号を、時刻の表示には「:」記号を使用してきました。

でも、年、月、日、時、分、秒などを使って表示したい場合もありますよね。そんな場合はFormat関数を使用します。

Format関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA】Formatで日付・時刻、数値、文字列の表示設定(和暦、曜日)
更新日 : 2019年4月21日

まとめ

ここでは、日付の扱い方について説明しました。

Date型で扱えば、日付の比較、計算などが関数を使って簡単にできて便利です。

どれも使いこなすことができるように、この記事を何度も参考にして下さいね!

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

LINEで送る
Pocket

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説