Microsoft Access 掲示板

日付入力時、西暦/和暦を選択できるようにする

6 コメント
views
4 フォロー

現在人事データ上で、生年月日や入社年月日、退職年月日など和暦でも西暦でもどちらでも入力および閲覧できるようにしたいと思っています。
テーブルでは
データ型:日付/時刻型
書式:g e"年 "m"月 "d\日
定型入力:>L99\年99\月99\日;0;_
(上記二つは月までしか必要ない項目もあり、その場合は年月のみの書式設定)
になっています。

閲覧に関してはオプショングループを使い
Private Sub オプション選択AfterUpdate()
    Select Case Me.オプション選択
        Case 1
            With Me.生年月日
                .InputMask = "9999\年99\月99\日;0;
"
                .Format = "yyyy年m月d日"
            End With
            If Not IsNull(Me.入社月日) Then
            With Me.入社月日
                .InputMask = "9999\年99\月99\日;0;"
                .Format = "yyyy年m月d日"
            End With
            End If
            If Not IsNull(Me.入社月日2) Then
            With Me.入社月日2
                .InputMask = "9999\年99\月99\日;0;
"
                .Format = "yyyy年m月d日"
            End With
            End If
            If Not IsNull(Me.社保加入年月日) Then
            With Me.社保加入年月日
                .InputMask = "9999\年99\月99\日;0;"
                .Format = "yyyy年m月d日"
            End With
            End If
            If Not IsNull(Me.社保喪失年月日) Then
            With Me.社保喪失年月日
                .InputMask = "9999\年99\月99\日;0;
"
                .Format = "yyyy年m月d日"
            End With
            End If
            If Not IsNull(Me.雇保加入年月日) Then
            With Me.雇保加入年月日
                .InputMask = "9999\年99\月99\日;0;"
                .Format = "yyyy年m月d日"
            End With
            End If
            If Not IsNull(Me.雇保喪失年月日) Then
            With Me.雇保喪失年月日
                .InputMask = "9999\年99\月99\日;0;
"
                .Format = "yyyy年m月d日"
            End With
            End If
            If Not IsNull(Me.退職金支払年月日) Then
            With Me.退職金支払年月日
                .InputMask = "9999\年99\月99\日;0;"
                .Format = "yyyy年m月d日"
            End With
            End If
            If Not IsNull(Me.退職年月日) Then
            With Me.退職年月日
                .InputMask = "9999\年99\月99\日;0;
"
                .Format = "yyyy年m月d日"
            End With
            End If

        Case Else
            With Me.生年月日
                .InputMask = "&&99\年99\月99\日;0;"
                .Format = "g e年m月d日"
            End With
            If Not IsNull(Me.入社月日) Then
            With Me.入社月日
                .InputMask = "&&99\年99\月99\日;0;
"
                .Format = "g e年m月d日"
            End With
            End If
            If Not IsNull(Me.入社月日2) Then
            With Me.入社月日2
                .InputMask = "&&99\年99\月99\日;0;"
                .Format = "g e年m月d日"
            End With
            End If
            If Not IsNull(Me.社保加入年月日) Then
            With Me.社保加入年月日
                .InputMask = "&&99\年99\月99\日;0;
"
                .Format = "g e年m月d日"
            End With
            End If
            If Not IsNull(Me.社保喪失年月日) Then
            With Me.社保喪失年月日
                .InputMask = "&&99\年99\月99\日;0;"
                .Format = "g e年m月d日"
            End With
            End If
            If Not IsNull(Me.雇保加入年月日) Then
            With Me.雇保加入年月日
                .InputMask = "&&99\年99\月99\日;0;
"
                .Format = "g e年m月d日"
            End With
            End If
            If Not IsNull(Me.雇保喪失年月日) Then
            With Me.雇保喪失年月日
                .InputMask = "&&99\年99\月99\日;0;"
                .Format = "g e年m月d日"
            End With
            End If
            If Not IsNull(Me.退職金支払年月日) Then
            With Me.退職金支払年月日
                .InputMask = "&&99\年99\月99\日;0;
"
                .Format = "g e年m月d日"
            End With
            End If
            If Not IsNull(Me.退職年月日) Then
            With Me.退職年月日
                .InputMask = "&&99\年99\月99\日;0;"
                .Format = "g e年m月d日"
            End With
            End If
     End Select
End Sub
というものを各フォームごと、必要な項目分VBAに書きました。
また、フォーム上の各日付系欄の設定は
書式:空欄
定型入力:>L99\年99\月99\日;0;

です。

入力に関して、なぜか生年月日と入社年月日は西暦でも和暦でも入力できるのですが、他の日付系入力欄が和暦でしか入力できません。(入力されているものはオプション選択すれば西暦表示で見える)
定型入力のせいかと思いそれを空欄にしても見たのですが、すると年と月の間に”/”を入れなくてはならず、入力担当からできれば”/”を入れずに連続で入力したい(202010のように入力し、表示は2020年10月)と言われました。

そこでなのですが
1.和暦でも西暦でもどちらでも入力可能な定型入力型というのはあるのでしょうか?
2.上記1がない場合でもオプションボタンなどを用いて、入力および閲覧の際に和暦/西暦を切り替えたいのですが、正しい(?)コードを教えていただけたら助かります。

お手数をおかけしますがよろしくお願いします。

亞紀姐
作成: 2020/11/06 (金) 14:59:34
通報 ...
1
hiroton 2020/11/06 (金) 16:12:28 修正 f9f49@f966d

例えば西暦入力に切り替えようとします

        If Not IsNull(Me.雇保加入年月日) Then '//[雇保加入年月日]にデータがあれば下記を実行
            With Me.雇保加入年月日
                .InputMask = "9999\年99\月99\日;0;"
                .Format = "yyyy年m月d日"
            End With
        End If

新規入力(データがない状態)だと実行されないコードですがそこは大丈夫ですか?

生年月日だけは

        Case 1
            With Me.生年月日
                .InputMask = "9999\年99\月99\日;0;_"
                .Format = "yyyy年m月d日"
            End With
            If Not IsNull(Me.入社月日) Then

で、条件判定がないので常に切り替わります。それぞれのIfが何をしたいのか確認してみてください

1.和暦でも西暦でもどちらでも入力可能な定型入力型というのはあるのでしょうか?

TextBox.InputMask property (Access)

&&99\年99\月99\日;0;_

で、どちらでも入力できるはずですが実際にどんな入力をするんですか?

2
亞紀姐 2020/11/06 (金) 20:29:46 3a4ba@81907 >> 1

hirotonさま>
ありがとうございます。
自分で書いておいて、IFがあるのをすっかり見落としていました…
確かに今私が行いたい挙動にはいらない部分でした。

>&&99\年99\月99\日;0;_
ありがとうございます!

>実際にどんな入力をするんですか?
提出された履歴書を元に入力しますが、履歴書に書かれているデータが和暦だったり西暦だったりするので、どちらでも入力できるようにしたいと希望があったのです。

おかげさまでどちらでも入力できるようになりました。
ありがとうございます。

ちなみになのですが、年月のみの表示(卒業年月など)のデータで
オプショングループを選択しない状態でも入力することもあるのですが、
入力されたデータの書式(西暦か和暦)通りの書式で
yyyy年m月かge年m月と表示することはできるのでしょうか?
(現在は入力は上記のように自由に選べますが、入力後フォーカスが移動したら、入力がどのような書式だったとしても、表示は指定の書式の表示になります)

もしご教示いただけたら助かります。
よろしくお願いします。

3
hiroton 2020/11/07 (土) 08:26:45 e2316@f966d

単票フォームですよね?

TextBox.Text property (Access)

入力中の文字列はTextプロパティで参照できるので1文字目が数字かそうでないかで書式を変更すればいいかな?

Private Sub 日付_AfterUpdate()
    With Me.日付
    If IsNumeric(Left(.Text, 1)) Then
        .Format = "yyyy年m月"
    Else
        .Format = "ge年m月"
    End If
    End With
End Sub
5
亞紀姐 2020/11/09 (月) 11:23:02 3a4ba@2da9b >> 3

hirotonさん>
ありがとうございます!
希望通りの挙動になりました。
助かりました。

また何かありましたらどうぞよろしくお願いします。
ありがとうございました。

4

ちなみになのですが、年月のみの表示(卒業年月など)のデータで
オプショングループを選択しない状態でも入力することもあるのですが、
入力されたデータの書式(西暦か和暦)通りの書式で
yyyy年m月かge年m月と表示することはできるのでしょうか?

その場限りでなく、レコード移動したりフォームを閉じてから開いても、入力時の書式を保存しておきたいということなら、
日付/時刻型のフィールドでは無理ですね。テキスト型にするか、別に西暦か和暦かを保存しておくフィールドが必要になります。

6
亞紀姐 2020/11/09 (月) 11:26:19 3a4ba@2da9b >> 4

hatenaさま>
なるほどです…
もし今後、変更が必要になった際には頑張ってフィールドごと変えてみます(関連する年齢計算とか在職年数とかの変更を考えるとちょっと気が遠くなりましたが(^-^;;

ありがとうございました。