今日の内容は、パソコンで7桁の和歴をよく扱う方に向けたものです。
7桁の和歴とは?
一般的に、AccessやExcelで和歴を入力する場合、明治は「m」、大正は「t」、昭和は「s」、平成は「h」、令和は「r」と入力してから、数字キーと「/」や「.」で年月日を区切って入力しますね。
公的機関などに導入されている業務システムは、日付を和歴で入力するようにできているものが多いと思います。
和休の職場が導入している業務システムは、公的機関向けに作られているものですので、日付の入力は和歴で行います。
最初は、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/25 | 1912/07/29 |
2 | 大正 | 1912/07/30 | 1926/12/24 |
3 | 昭和 | 1926/12/25 | 1989/01/07 |
4 | 平成 | 1989/01/08 | 9999/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
前提条件
使用方法
早速、イミディエイトウィンドウでこの関数をテストしてみます。
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/25 | 1912/07/29 |
2 | 大正 | 1912/07/30 | 1926/12/24 |
3 | 昭和 | 1926/12/25 | 1989/01/07 |
4 | 平成 | 1989/01/08 | 2019/04/30 |
5 | 令和 | 2019/05/01 | 9999/12/31 |
令和の日付になるかテスト
先ほどと同様、イミディエイトウィンドウに WdatetoJP7(#2020/3/1#) と入力し、Enterキーを押下してください。
次の行に5020301 、すなわち、令和2年3月1日が表示されましたか?
改元が生じたら、このようにして対応してください。
なお、令和の改元では、ウィンドウズアップデートにより令和の入力ができるようになりましたが、この関数では、元号管理テーブルの入力次第でコントロールすることができます。
選択クエリで使用する
実際に選択クエリで使用してみましょう。
職員の生年月日を入力した「テーブル1」というテーブルを作成し、次の通りデータを入力しました。
職員番号 | 生年月日 |
---|---|
1 | 1900/08/26 |
2 | 1956/10/09 |
3 | 1986/04/01 |
4 | 1921/11/05 |
5 | 2001/07/10 |
6 | 2015/10/01 |
7 | 2019/06/25 |
これを選択クエリで和歴7桁に変換します。選択クエリをSQLビューで表示し、次のSQL文を貼り付けてください。
SELECT [テーブル1].職員番号, [テーブル1].生年月日, WdatetoJP7([テーブル1]![生年月日]) AS 和歴7桁 FROM テーブル1;
入力できたら、データシートビューに切り替えてください。
職員番号 | 生年月日 | 和歴7桁 |
---|---|---|
1 | 1900/08/26 | 1330826 |
2 | 1956/10/09 | 3311009 |
3 | 1986/04/01 | 3610401 |
4 | 1921/11/05 | 2101105 |
5 | 2001/07/10 | 4130710 |
6 | 2015/10/01 | 4271001 |
7 | 2019/06/25 | 5010625 |
和歴7桁フィールドをご覧ください。このように変換することができます。
長くなったので、今日はここまで。次回、和歴7桁日付から日付型に逆変換する関数をご紹介します。
続きは、【和歴7桁→日付型編】をご覧ください。
コメントをどうぞ!