Accessの日付計算関数をお探しですね。
広告
Access 日付計算ならこれ!DateAdd, DateDiff, Format関数の使い方と実用例
Accessでデータベースを作るとき、絶対に避けて通れないのが「日付の計算」です。
たとえば請求書システムで「納品日の翌月末」を自動で出したり、会員管理で「誕生日から今の年齢」を計算したり、こういう場面はしょっちゅう出てきます。
でも、Excelみたいにセルを足したり引いたりするだけじゃうまくいかないんですよね。
Accessには専用の関数があって、それを使いこなす必要があります。
この記事では、実務でよく使う3つの日付関数(DateAdd、DateDiff、Format)を、基本から応用まで分かりやすく説明していきます。
これさえマスターすれば、クエリやVBAでの作業効率がグッと上がりますよ!
DateAdd関数で「〇日後」「〇ヶ月後」をラクラク計算
Accessで「この日から1週間後」とか「3ヶ月前」みたいな日付を求めたいとき、一番よく使うのが**DateAdd関数**です。
Excelなら日付に「+1」すれば翌日になりますが、Accessでは年・月・日・時間など、どの単位で計算するかをハッキリ指定しないといけません。
使い方は `DateAdd(間隔, 値, 日付)` というシンプルな形です。
最初の「間隔」には、何を基準に計算するかを文字で指定します。
「yyyy」なら年、「m」なら月、「d」なら日、「n」なら分といった感じです。
2番目の「値」には足したい(または引きたい)数字を入れます。
プラスなら未来、マイナスなら過去の日付が返ってきます。
たとえばクエリで「注文日の1ヶ月後」を計算したいなら、`支払期限: DateAdd(“m”, 1, [注文日])` と書けばOKです。
この関数のすごいところは、カレンダーの辻褄を自動で合わせてくれることです。
たとえば1月31日の「1ヶ月後」って、普通に30日足すと3月になっちゃいますよね。
でもDateAdd関数なら、ちゃんと「2月28日」(うるう年なら29日)って出してくれるんです。
だから月末近くの日付計算でも、面倒な条件分岐を書かなくても正確な支払期限や更新日が出せちゃいます。
これ、めちゃくちゃ便利です!
DateDiff関数で「何日経った?」を計算するときの落とし穴
2つの日付の間がどれくらいかを知りたいときに使うのが**DateDiff関数**です。
「入会してから今日まで何日?」とか「プロジェクトの開始から終了まで何ヶ月?」みたいなときに活躍します。
ExcelのDATEDIF関数に似てるんですが、Accessならではのクセがあるので要注意です。
書き方は `DateDiff(間隔, 開始日, 終了日)` です。
「間隔」にはDateAddと同じように、年・月・日などを指定します。
たとえば入会日から今までの日数なら `DateDiff(“d”, [入会日], Date())` って書きます。
ここで大事なのは、DateDiff関数は「指定した単位の区切りをいくつまたいだか」を数えるってことです。
特に気をつけたいのが年齢計算です。
たとえば `DateDiff(“yyyy”, #2023/12/31#, #2024/01/01#)` って実行すると、実際は1日しか経ってないのに、年をまたいでるから答えは「1」になっちゃうんです。
これをそのまま年齢計算に使うと、誕生日前なのに年が変わっただけで1歳増えちゃいます。
だから正確な年齢を出すには、DateDiffで出した数字から、誕生日前ならマイナス1する、みたいな調整が必要なんです。
仕事で期間計算するときは、この「区切りを数える」っていう特性をちゃんと理解しておきましょう。
Format関数で日付の見た目をキレイに整える
Accessのテーブルに入ってる日付データは、基本的にシステムの標準形式で保存されてます。
でもレポートや画面に表示するときは、「2023年10月1日」とか「令和5年10月1日(日)」みたいに、読みやすい形にしたいですよね。
そんなときに使うのが**Format関数**です。
データ自体は変えずに、見た目だけを「文字列」として整形してくれます。
使い方は `Format(日付, “書式記号”)` です。
よく使う書式記号はこんな感じです。
* **yyyy/mm/dd**:2023/10/01 みたいな普通の西暦
* **ggge年m月d日**:令和5年10月1日 みたいな和暦
* **aaa / aaaa**:「日」または「日曜日」みたいな曜日
たとえばクエリで来店日から曜日だけ取り出したいなら、`曜日: Format([来店日], “aaaa”)` って書けば、「月曜日」「火曜日」って文字列が取れます。
これを使えば曜日別の売上集計とかも簡単にできちゃいます。
ただし注意!Format関数の結果は「文字列」なんです。
だから並べ替え(ソート)に使うと、「10月」より「2月」が先に来ちゃったりします(文字の”1″と”2″で比べちゃうから)。
ソートには元の日付データを使って、表示だけFormat関数を使う、っていう使い分けが大事です。
実務でめっちゃ使う!月末・月初を自動で出すワザ
実際の仕事では「今月末」とか「来月の1日」を求めたいことがすごく多いです。
でもAccessにはExcelのEOMONTH関数(月末を出す関数)みたいな便利なやつがないんです。
だからここまで紹介した関数を組み合わせて計算する必要があります。
ここでは実践的な方法を紹介しますね。
一番スマートなのは**DateSerial関数**を使う方法です。
DateSerial関数は `DateSerial(年, 月, 日)` で日付を作れるんですが、引数に「0」やマイナスの値も使えるっていう裏技があります。
たとえば「今月末」を求めたいなら、「来月1日の前日」って考えます。
具体的には `DateSerial(Year(Date()), Month(Date()) + 1, 0)` って書きます。
日のところに「0」を指定すると、その月の前月末(つまり今月末)を返してくれるんです。
これ、知ってるとめっちゃ便利!
請求書の支払期限が「翌月末払い」なら、`DateSerial(Year([請求日]), Month([請求日]) + 2, 0)` って書けば、「翌々月の0日」=「翌月末」が一発で出せます。
こんな感じで、関数の特性をパズルみたいに組み合わせると、Accessでも複雑な日付ルールに対応できるシステムが作れちゃいます。
まずは基本の3関数をしっかり覚えて、少しずつこういう応用テクニックも取り入れていってください。
きっと「あ、こんなこともできるんだ!」って発見がたくさんあると思いますよ!
広告
