今日の内容は、パソコンで和歴を扱う方に向けたものです。
Accessで日付を入力するときは、「定型入力」という機能を使うと便利ですね。
では、和歴を入力するときはどうでしょうか?
「定型入力ウィザード」から「和暦日付(T、S、H)」を選択して、定型入力に「L99\年99\月99\日 」と設定すると、和歴で入力することができます。
この時、令和2年3月15日と入力したいときは、r 0 2 0 3 1 5 とキーを押していきます。
テンキーから指を離して、「R」キーを押さなきゃならんのですよ。入力ミスしちゃいますよね。西暦ならすべてテンキーで入力できるのにね。
和休もそう思っていました。
和歴を数字だけで入力することはできないのかな?
和休の職場が導入している業務システムは、公的機関向けに作られているものですので、日付の入力は和歴で行います。
最初は、AccessやExcelと同じように、明治は「m」、大正は「t」、昭和は「s」、平成は「h」、令和は「r」と入力してから数字キーを打っていたのですが、平成15年ぐらいに行われたバージョンアップで、明治は「1」、大正は「2」、昭和は「3」、平成は「4」、令和は「5」というように数字が割り当てられたのです。
つまり、令和2年3月15日と入力したいときは、5 0 2 0 3 1 5 とキーを押せばいいのですよ。こいつは楽ですね!
そこで、和休も数字だけで和歴入力できるように、VBAを組んでみたのが先日の記事です。
では、この関数を応用して、数字キーによる和歴の日付入力を実装してみたいと思います。
和休がAccessのフォームに日付入力用のテキストボックスを設置するときは、オリジナルのルールを決めています。


こうしておけば、日付型であるフィールドに保存された数値をテキストボックスに代入するだけで、R02/03/15 のような日付で表示されます。
DAOやADOを使ってフォーム上の日付をテーブルに追加・更新するときも、以下のようなSQL文を書けばそのまま日付として認識されて、追加・更新することができます。
"insert into 職員マスタ (職員番号,生年月日) values(" & me.txt_職員番号 & ",#" & me.txt_生年月日 & "#)"
"update 職員マスタ set 生年月日=#" & me.txt_生年月日 & "# where 職員番号=" & me.txt_職員番号
手順1 元号管理テーブルを作成する
では、Accessファイルに組み込む手順を説明します。
明治は「1」、大正は「2」、昭和は「3」、平成は「4」、令和は「5」というように、元号に数字を割り当てます。
元号と数字を紐づけるため、「元号管理テーブル」を作成します。元号管理テーブルについては、先日の記事をご覧ください。
手順2 標準モジュールにコードを記述する
標準モジュール内に、先日の記事で紹介した日付型→和歴7桁日付に変換する関数と、和歴7桁日付→日付型に変換する関数を記述します。
手順3 フォームにコントロールを配置する

フォームを新規作成し、テキストボックスを1つ、コマンドボタンを1つ作成しました。
テキストボックスだけあれば十分なのですが、フォームの中にコントロールが1つしかないと、テキストボックスからフォーカスが離れませんので、とりあえずフォーカスが移動するコントロールを作ってください。
今回は、コマンドボタンを1つ作成しました。
手順4 コントロールの処理を記述する
和歴7桁日付を扱うコントロールにフォーカスが当たったとき、日付型→和歴7桁日付に変換する関数を実行します。
フォーカス取得時
「txt_日付」と名前を付けたテキストボックスのフォーカス取得時イベントに、以下のコードを記述します。
Private Sub txt_日付_Enter() 'テキストボックスに設定した書式をクリアします Me.txt_日付.Format = "" '日付を和歴7桁日付に変換します Me.txt_日付 = WdatetoJP7(Me.txt_日付) End Sub
フォーカス喪失時
同様に、フォーカス喪失時イベントに、以下のコードを記述します。
Private Sub txt_日付_Exit(Cancel As Integer) '和歴7桁日付を日付に変換します Me.txt_日付 = JP7toWdate(Me.txt_日付) 'テキストボックスに書式を設定します Me.txt_日付.Format = "gee/mm/dd" End Sub
動作イメージです

テキストボックスに、令和2年3月15日を入力します。和歴7桁日付で入力するので、5 0 2 0 3 1 5 と入力します。
入力できたら、Enterキーを押下して、フォーカスをコマンドボタンに移してください。

すると、フォーカス喪失時イベントに記述した和歴7桁日付→日付に変換する関数が、5020315を2020/03/15 という日付に変換します。
さらにテキストボックスの書式に「gee/mm/dd」を設定したので、最終的にR02/03/15 という表示に変換されました。
では、R02/03/15 と表示されているテキストボックスにフォーカスを移してください。

テキストボックスがフォーカスを取得すると、フォーカス取得時イベントに記述した日付→和歴7桁日付に変換する関数が 5020315 という和歴7桁日付に変換します。
このようにして、数字キーだけで和歴を入力することができました。
おまけ

フォーカス喪失時の書式を「gee/mm/dd」ではなく、「gggee年mm月dd日」に変更すると、令和02年03月15日 という表示になりますので、必要に応じて変更してください。
Private Sub txt_日付_Exit(Cancel As Integer) '和歴7桁日付を日付に変換します Me.txt_日付 = JP7toWdate(Me.txt_日付) 'テキストボックスに書式を設定します Me.txt_日付.Format = "gggee年mm月dd日" End Sub
また、元号管理テーブルを明治「1」、大正「3」、昭和「5」、平成「7」、令和「9」に置き換えると、年金事務所で使用しているシステムが扱っている日付になります。
元号CD | 元号 | 元号FR | 元号TO |
---|---|---|---|
1 | 明治 | 1868/01/25 | 1912/07/29 |
3 | 大正 | 1912/07/30 | 1926/12/24 |
5 | 昭和 | 1926/12/25 | 1989/01/07 |
7 | 平成 | 1989/01/08 | 2019/04/30 |
9 | 令和 | 2019/05/01 | 9999/12/31 |

令和2年3月15日は9020315と表示されます。
コメントをどうぞ!