万年貧乏アラフィフオヤジの管理人です。
さて、管理人は毎年、医療費控除をやっているのですが、
まぁこれが面倒くさくて困っています。
確定申告はe-tax
確定申告は、e-taxでできるので、
とくに税務署に行かなくても良くなったのはかなり便利なのですが、
肝心の医療費控除がクソとまではいいませんが、まだまだかなり面倒です。
マイナポータルと連携させて取り込むという方法もあるのですが、
基本的に医療費控除は、自分の医療費だけで、
家族の分も合算してやろうとすると・・・
マイナポータル側で代理申請の設定をしなければいけないなど、
若干の手間が発生します。
また、前年の12月分の医療費が反映されるのが、2月の中旬頃となるので、
1月中にやりたいと思ってもできないのが面倒くさい。
エクセルで手入力するしかない?
となると・・・
国税庁のHPの確定申告書作成コーナーから、
医療費集計フォーム(エクセル)をダウンロードして
手入力するしかないのですが、
件数が多くなると、これがかなり辛い作業となります。
以前までは、地道に手で入力していたのですが、
さすがに面倒になって、
11月分までなら、1月11日くらいに反映されるので、
11月分までマイナポータルからダウンロードして、
12月分だけ手入力しようとしたのですが、
ダウンロードしたCSVが普通に使える形式ではなかったので、
かなり苦労しました。
マクロで整形しないとエクセルにコピペできない
さて、マイナポータルからダウンロードしたCSVをエクセルで読み込むと・・・・
おそらくXML形式なのでしょうが、
一般的な表形式にはなりません。
ですので、医療費集計フォーム(エクセル)にコピペできないわけです。
しかも、CSVを読み込むには、そのまま開くのではなく、
決まった所作が必要です。
エクセルのバージョンによって異なる様ですが、
管理人が使用している2019では、次の方法でした。
1.マイナポータルから医療費のCSVをダウンロードする。
マイナポータル → わたしの情報 → 医療費通知情報
→ 限範囲選択 → 形式を選択してダウンロード → CSV
2.エクセルのデータタブ → テキスト又はCSVから → 1でダウンロードしたCSVを選択
→ 元のファイル(UTF-8を選択)・区切り記号(コンマのまま)
→ データ型検出(最初の200行に基づくのまま)
→ 読み込みを選択
6.column1とcolumn2の2列のデータが読み込まれる
これで、エクセルに取り込みはできるのですが、
このままでは、医療費集計フォームにコピペできません。
所謂エクセルにコピペできる表形式になっていない訳です。
なお、エクセルのバージョンによっては、次の作業が必要な場合もあります。
CSVのインポート時に、[データの変換]から、手動で[列の分割]位置を調整する。
1.CSVのインポート時に、[データの変換]をクリック
2.[Power Queryエディター]の[ホーム]タブ[列の分割]から、[区切り記号の分割]を選択し、以下の設定をする。
→ 区切り記号を選択するか入力くしてください → コンマ
→ 分割 → 1番左の区切り記号
3.[OK]で列を分割後に、余計な列は削除する
4.[ホーム]タブの[閉じて読み込む]をクリック
結局マクロか・・・
結局、ですがマクロを使って医療費集計フォームにコピペできるように、
整形する必要があります。
Attribute VB_Name = "Module1"
Sub Macro1()
'
' Macro1 Macro
'
'*************ここから*********
'
'CSVをマイナポータルからダウンロード
'CSVの読み込みはUTF-8
'最初の診療年月までの行は消す
'マクロ実行後に確定申告のエクセルに貼り付ける。
'確定申告時には前年の10までしかダウンロードできない為、2か月分は手で追加する
Cells(1, 1).Select
'名前を取得
Dim myname As String
myname = Cells(9, 2)
'最初の診療年月の行を取得
Dim cntrow As Long
Dim firstrow As Long
cntrow = 1
Do
If Cells(cntrow, 1) = "診療年月" Then
firstrow = cntrow
Exit Do
Else
cntrow = cntrow + 1
End If
Loop
'E1セルからカラムを設定
Cells(1, 5) = "氏名"
Dim cntcolumn As Long
cntcolumn = 6
If Cells(cntrow, 1) = "診療年月" Then
Do While Cells(cntrow, 1) <> ""
Cells(1, cntcolumn) = Cells(cntrow, 1)
cntrow = cntrow + 1
cntcolumn = cntcolumn + 1
If Cells(cntrow, 1) = "診療年月" Then
Exit Do
End If
Loop
Else
End If
'医療情報を行にコピー
Dim maxrow As Long
Dim startrow As Long
Dim copyrow As Long
Dim copycolumn As Long
maxrow = Cells(Rows.Count, 1).End(xlUp).Row
startrow = firstrow
copyrow = 1
copycolumn = 6
Do While startrow <= maxrow
If Cells(startrow, 1) = "診療年月" Then
copycolumn = 6
copyrow = copyrow + 1
Cells(copyrow, 5) = Cells(9, 2)
Cells(copyrow, copycolumn) = Cells(startrow, 2)
startrow = startrow + 1
Else
Cells(copyrow, copycolumn + 1) = Cells(startrow, 2)
startrow = startrow + 1
copycolumn = copycolumn + 1
End If
Loop
'*************ここまで*********
End Sub
で、マクロを作って、
マイナポータルからダウンロードしたCSVを成形した動画が次のとおりとなります。
これでようやく、医療費集計フォーム(エクセル)にコピペできるようになります。
お国は、CSVのこういう使い方って想定していると思うのですが・・・・
なぜ、こんな面倒な作業をさせるのかは分かりません。
ちなみに、このCSVは、なぜか自己負担額が円単位まで表示されていますので、
10円未満の単位を四捨五入する必要があるので要注意です。
コメント