【Excel VBA】月日による日付の入力時に西暦の値を自動的に変更する

いま、確定申告(青色)をするために、Excel で仕訳台帳を作ってるんですヨ。

この記事を書いてる今は 2019 年だけど、入力するのは去年のデータだから、たとえば 2018/2/16 みたいに入力する必要がある。

でも入力するデータがたくさんあって、毎回 2018/ を入力するのも面倒なので 2/16 とだけ入力して済ませたい。でもでもで~も~、2/16 とだけ入力すると自動的に(今年の西暦の)2019/2/16 になってしまう・・・。

調べてみたんですが、Excel アプリにそのへんを調整してくれる機能はないようなので、みなさん色々工夫されてるようですね(関数使ったり、オートコレクトを利用したり、一括置換したり…)。

この記事では、VBA マクロによるアプローチをご紹介します(閏年も考慮しておく)。

と言っても下にコードを掲載するだけですが。コード中のコメントを解説のかわりとさせてください。

Private Sub Worksheet_Change(ByVal Target As Range)

    If IsDate(Target) = False Then
        Exit Sub
    End If
    
    '西暦が今と同じ場合、西暦を去年に修正する
    If Year(Target) = Year(Now) Then
        
        '1年前の日付に変換
        Dim changedDate As Date: changedDate = DateAdd("yyyy", -1, Target)
        
        'うるう年の対策(たとえば閏年の 2/29 を1年前の日付に変換すると自動的に 2/28 にまるめられる)
        If Day(changedDate) <> Day(Target) Then
            MsgBox "変換後の日付が変わってしまうので変換を中止しました。(今年は閏年?)" & vbCrLf & vbCrLf & Target & vbCrLf & "   ↓" & vbCrLf & changedDate, vbExclamation, "エレン・イーストのブログ"
            Exit Sub
        End If
        
        'イベント停止
        Application.EnableEvents = False
        Target = changedDate
        'イベント再開
        Application.EnableEvents = True
    End If

End Sub

Excel の Worksheet 関数として実装しておけば、月日を入力するだけで、西暦が去年の日付に変わります。

 

さて、確定申告の準備を急がねば・・・。三(; ̄▽ ̄)o

 

 

 

 

購読する
通知を受け取る対象
guest
0 Comments
Inline Feedbacks
View all comments