Accessで和歴7桁日付を扱う関数を作りました【日付型→和歴7桁編】

スポンサーリンク
この記事は約7分で読めます。

今日の内容は、パソコンで7桁の和歴をよく扱う方に向けたものです。

スポンサーリンク

7桁の和歴とは?

一般的に、AccessやExcelで和歴を入力する場合、明治は「m」、大正は「t」、昭和は「s」、平成は「h」、令和は「r」と入力してから、数字キーと「/」や「.」で年月日を区切って入力しますね。

令和2年3月1日を入力するときは、「r2.3.1」と入力しますね。

公的機関などに導入されている業務システムは、日付を和歴で入力するようにできているものが多いと思います。

和休の職場が導入している業務システムは、公的機関向けに作られているものですので、日付の入力は和歴で行います。

最初は、AccessやExcelと同じように、明治は「m」、大正は~ と入力してから数字キーを打っていたのですが、平成15年ぐらいに行われたバージョンアップで、明治は「1」、大正は「2」、昭和は「3」、平成は「4」、令和は「5」というように数字が割り当てられたのです。

つまり、令和2年3月1日と入力したいときは、5020301 とキーを押せばいいのですよ。

さて、この業務システム、CSVなどのテキストデータで大量のデータを入力することができる機能がついているのですが、なんと日付を入力するときも「5020301」というような和歴7桁を要求するのですよ。

CSVファイルを作成するとき、数件ならまだしも、膨大な量の日付をいちいち手作業で治すわけにはいきません。

そこで、日付型→和歴7桁に変換する関数と、和歴7桁→日付型に変換する関数を作成しましたのでご紹介します。

スポンサーリンク

元号を管理するテーブルを作成

まず、テーブルを用意しましょう。テーブル名は、「元号管理」とします。

テーブルデザイン

項目番号フィールド名説明データ型インデックス
1元号CD元号に割り当てた数字長整数型はい (重複なし)
2元号元号短いテキスト(String型)いいえ
3元号FRその元号の最初の日付(西暦)日付/時刻型はい (重複なし)
4元号TOその元号の最後の日付(西暦)日付/時刻型はい (重複あり)

入力するデータ

テーブルには以下のようにデータを入力してください。

令和がないですが、後述する改元のときの手順を説明するため、省略しています。

元号CD元号元号FR元号TO
1明治1868/01/251912/07/29
2大正1912/07/301926/12/24
3昭和1926/12/251989/01/07
4平成1989/01/089999/12/31
スポンサーリンク

日付型を和歴7桁に変換する関数

使用される際は、そちらの環境で十分テストのうえ使用してください。

Function WdatetoJP7(Wdate As Variant) As Variant

'変数を定義

'元号コードを格納する変数
Dim Gengo_CD As Long

'元年からの年数を格納する変数
Dim JPnensu As Long

'初期化
WdatetoJP7 = Null

'空白値又はNULL値が入力されたときは処理を中止(NULL値が返る)
If Wdate = "" Or IsNull(Wdate) Then Exit Function

'日付型以外の数値が入力されたときは処理を中止(NULL値が返る)
If Not IsDate(Wdate) Then Exit Function

'西暦1868年1月25日前の日付が入力されたときは処理を中止(NULL値が返る)
If Wdate < #1/25/1868# Then Exit Function

'西暦の日付から元号CDを取得
Gengo_CD = Nz(DLookup("元号CD", "元号管理", "元号FR<=#" & Wdate & "# and 元号TO>=#" & Wdate & "#"), 0)

'西暦の日付から経過した年数を計算する
JPnensu = Year(Wdate) - Left(DLookup("元号FR", "元号管理", "元号CD=" & Gengo_CD), 4) + 1

'元号が取得できなかった場合、処理を中止(NULL値が返る)
If Gengo_CD = 0 Then Exit Function

'戻り値を設定
WdatetoJP7 = Gengo_CD & Format(JPnensu, "00") & Format(Wdate, "mmdd")
End Function

前提条件

  • 日付型を入力し、バリアント型で結果を返します。
  • 変換できない数値が入力されたらNULLを返します。
  • 変換できる範囲は、明治元年(1868年)1月25日以降の日付です。

使用方法

早速、イミディエイトウィンドウでこの関数をテストしてみます。

イミディエイトウィンドウで関数のテストを行う

debug.Print と入力し、

イミディエイトウィンドウで関数のテストを行う

続けて WdatetoJP7( と入力します。すべて半角です。

イミディエイトウィンドウで関数のテストを行う

日付を入力します。ここでは、2020年3月1日を入力します。VBAでは、日付は#で囲み、/ で年月日を区切るのがルールです。

)を入力したら、Enterキーを押下してください。

イミディエイトウィンドウで関数のテストを行う

次の行に 4320301 と表示されましたか?

4320301 、つまり、平成32年3月1日が出力されています。日付型が和歴7桁に変換されました。

スポンサーリンク

改元のときの対応方法

和歴を使うにあたって、避けて通れないのが「改元」です。

改元の時の手順を説明します。

平成の末日を入力する

元号管理テーブルの平成の行にある「元号TO」フィールドの9999/12/31を、2019/4/30に変更して、平成の末日を設定します。

続いて、令和の日付を入力します。

これらを入力した結果、元号管理テーブルは以下のとおりになります。

元号CD元号元号FR元号TO
1明治1868/01/251912/07/29
2大正1912/07/301926/12/24
3昭和1926/12/251989/01/07
4平成1989/01/082019/04/30
5令和2019/05/019999/12/31

令和の日付になるかテスト

イミディエイトウィンドウで関数のテストを行う

先ほどと同様、イミディエイトウィンドウに WdatetoJP7(#2020/3/1#) と入力し、Enterキーを押下してください。

次の行に5020301 、すなわち、令和2年3月1日が表示されましたか?

改元が生じたら、このようにして対応してください。

なお、令和の改元では、ウィンドウズアップデートにより令和の入力ができるようになりましたが、この関数では、元号管理テーブルの入力次第でコントロールすることができます。

スポンサーリンク

選択クエリで使用する

実際に選択クエリで使用してみましょう。

職員の生年月日を入力した「テーブル1」というテーブルを作成し、次の通りデータを入力しました。

職員番号生年月日
11900/08/26
21956/10/09
31986/04/01
41921/11/05
52001/07/10
62015/10/01
72019/06/25

これを選択クエリで和歴7桁に変換します。選択クエリをSQLビューで表示し、次のSQL文を貼り付けてください。

SELECT [テーブル1].職員番号, [テーブル1].生年月日, WdatetoJP7([テーブル1]![生年月日]) AS 和歴7桁
FROM テーブル1;

入力できたら、データシートビューに切り替えてください。

職員番号生年月日和歴7桁
11900/08/261330826
21956/10/093311009
31986/04/013610401
41921/11/052101105
52001/07/104130710
62015/10/014271001
72019/06/255010625

和歴7桁フィールドをご覧ください。このように変換することができます。

長くなったので、今日はここまで。次回、和歴7桁日付から日付型に逆変換する関数をご紹介します。

続きは、【和歴7桁→日付型編】をご覧ください。

コメントをどうぞ!

タイトルとURLをコピーしました