Pythonで医療費の集計をする 医療費控除 2

Excelに入力した医療費の明細をPythonで集計して、集計結果を同じExcelのブックに新しいシートとして追加するプログラムです。

以前に書いた記事のプログラムが、Pythonかpandasのバージョンアップによって動作しなくなってしまいましたので書き直します。

Excelのブック iryohi_shukei.xlsm

Pythonのファイル iryohi_shukei.py

を使用します。

Pythonのプログラムについて

#モジュールのインポート
import pandas as pd
import openpyxl
import win32com.client

#ファイル名の指定
path = r'D:\iryohi_shukei.xlsm'

#Excelファイルの読み込み B列からE列を使用 1行目は読み飛ばし
df = pd.read_excel(path, usecols=[1,2,3,4], skiprows=[1])

#列名を指定する
df.columns = ['氏名','支払先の名称','医療費の区分','医療費の額']

#医療費の集計
grouped = df.groupby(['氏名','支払先の名称','医療費の区分'])

#集計結果をExcelのファイルに新しいシート'syukei_py'として追加する
with pd.ExcelWriter(path,mode='a',if_sheet_exists='replace',engine='openpyxl'\
                    ,engine_kwargs={'keep_vba': True}) as writer:
    grouped.sum().to_excel(writer, sheet_name='shukei_py',merge_cells=False)

# 書式を整える
app = win32com.client.Dispatch("Excel.Application")
app.Visible = True
app.Workbooks.Open(path)
app.Application.Run('format')
app.Workbooks(1).Close(SaveChanges=1)
app.Application.Quit()

7行目でiryohi_shukei.xlsmがある場所を指定してください。

Excelのブックiryohi_shukei.xlsmについて

ワークシート”nyuryoku”の3行目以降、B列からE列に入力します。F列は使っていません。

このブックには以下の2つのマクロがあります。

  • fill_in_the_blanks ・・・ B列~D列に入力する内容が上の行の内容と同じであった場合、同じ内容を入力するのが面倒なので入力の時には空白にしておき、後で一括して上の行の内容をコピーするためのマクロ
  • format ・・・ Pythonで集計した結果をExcelのブックに新しいシートに追加した場合、そのままでは見づらいので書式を整えるためのマクロ

このマクロはExcelのブックに新しいシートが追加された後に、Pythonから実行されます。上記のPythonのプログラムの23行目以降の部分がそれに該当します。

Pythonの実行

ワークシート”nyuryoku”に入力し終わったらブックを保存して閉じます。

その後、iryohi_shukei.pyを実行するとワークシート”nyuryoku”の集計結果がワークシート”shukei_py”として追加されます。

タイトルとURLをコピーしました