2/04/2020

Access。年月日が別々のフィールドから元号の日付をつくるには?【CDate】

Access。年月日が別々のフィールドから元号の日付をつくるには?

<Access:CDate関数>

Excelで、年月日が別々のセルに入力してある場合は、DATE関数を使うことで日付にすることができますが、Accessでは、どのようにしたらいいのでしょうか?

【西暦年月日の場合】

次のようなテーブルを用意しました。

このテーブルをつかって、クエリを作っていきましょう。

年月日という演算フィールドをつくってみました。
年月日: CDate([年] & "/" & [月] & "/" & [日])

CDate関数をつかうことで、日付型で表示することができます。

ただし、ExcelのDATE関数は、DATE(年,月,日)という引数ですが、「,」でフィールドを区切るのではなく、「”/”」(スラッシュ)を使って、年月日のそれぞれのフィールドを「&」をつかって結合させてあげます。

文字結合させたので、文字型(短いテキスト型)になっていますから、CDate関数をつかって、日付型に変更させることによって、日付にすることができます。

では、実行して確認してみましょう。

このように、日付にすることができました。

テーブルが年月日で分かれているフィールドならば、CDate関数だけで対応できるのですが、次のようなフィールドで管理している場合は、どうしたらいいのでしょうか?

【元号年月日の場合】


先程と異なるのは、西暦の年フィールドで管理しているのではなくて、元号で管理している場合です。

元号のフィールドがあり、その元号の年フィールドがあります。

こうなっている場合は、当然「”/”」(スラッシュ)で連結するわけにはいきません。

このような元号の場合は、次のように演算フィールドを作ったクエリで対応することができます。

「年」「月」「日」でフィールドを連結することで、対応させて確認してみましょう。

日付: CDate([元号] & [年] & "年" & [月] & "月" & [日] & "日")

実行して確認してみましょう。

別々のフィールドだったのが、CDate関数を使うことで、日付型になったのはいいのですが、残念ながら、元号表示ではなくて、西暦表示になってしまっています。

このCDate関数は、連結内に、元号を含んでいても、基本設定されている、西暦表示になってしまいます。

なので、元号にするには、Farmat関数とCDate関数のネストにした演算フィールドを作る必要があります。

先程の演算フィールドを次のように修正します。

元号表示: Format(CDate([元号] & [年] & "年" & [月] & "月" & [日] & "日"),"ggge\年m\月d\日")

Format関数は、Excelでいう表示形式を設定することができる関数です。表示形式はExcelと大きく変わりませんが、Accessの場合、
"ggge\年m\月d\日"
と年月日を「”」(ダブルコーテーション)で囲むのではなく、「\」をつけることで、「\」の次の文字をそのまま表示させることができます。

この点が、ExcelとAccessの相違点です。

では、実行して確認してみましょう。

このように、元号で年月日を表示することができました。

そして、元号だけでなくて、実は、Excelと大きく異なることがAccessにはあります。

それは、Excelは、1900/1/1から管理しているので、それよりも前の日付を作ることはできないのですが、Accessは、それよりも前の日付。

今回でいうと、明治初期でも管理することができるようになっています。