いま、確定申告(青色)をするために、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