以前のプログラムで「teraoka_shukei.xlsx」というファイルを作成しましたが、このファイルから弥生会計への入力用データを作成します。
- 売上を計上するデータ
- 売上金額を現金売上と売掛金(クレジットカード・paypay)に振替するデータ
- 現金売上の金額を預金口座に入金するデータ
の3つを作ります。仕訳で言うと、
1.が (借方)仮払金(貸方)売上
2.が (借方)現金(貸方)仮払金 又は
(借方)売掛金(貸方)仮払金
3.が (借方)預金(貸方)現金
となります。
今回は1.の売上を計上するデータの作成です。
プログラムのコードは以下の通りです。
import pandas as pd
from decimal import Decimal, ROUND_HALF_UP
def r_round(x):
return int(Decimal(str(x)).quantize(Decimal('0')\
,rounding=ROUND_HALF_UP))
#Excelファイルの取り込み
df = pd.read_excel('teraoka_shukei.xlsx')
#記述しやすくするために列名を変更する
df.columns = ['A','B','C','D','E','F','G','H','I' \
,'J','K','L','M','N','O','P','Q','R','S','T','U','V','W']
j = len(df)
#8%軽減税率のデータ作成
df_uriage_8 = pd.DataFrame(index=[i for i in range(j)]\
, columns=['A','B','C','D','E','F','G','H','I'\
,'J','K','L','M','N','O','P','Q','R','S','T'\
,'U','V','W','X','Y'])
#要素の転記
df_uriage_8['A'] = 2000
df_uriage_8['B'] = ''
df_uriage_8['C'] = ''
df_uriage_8['D'] = df['O']
df_uriage_8['E'] = '仮払金'
df_uriage_8['F'] = '売上'
df_uriage_8['G'] = ''
df_uriage_8['H'] = '対象外'
df_uriage_8['I'] = df['T']
df_uriage_8['J'] = 0
df_uriage_8['K'] = '売上高商品'
df_uriage_8['L'] = ''
df_uriage_8['M'] = ''
df_uriage_8['N'] = '課税売上内軽減8%'
df_uriage_8['O'] = df['T']
df_uriage_8['P'] = (df['T'] - df['T']/1.08).map(r_round)
df_uriage_8['Q'] = '本日売上高'
df_uriage_8['R'] = ''
df_uriage_8['S'] = ''
df_uriage_8['T'] = 0
df_uriage_8['U'] = ''
df_uriage_8['V'] = ''
df_uriage_8['W'] = 0
df_uriage_8['X'] = 0
df_uriage_8['Y'] = 'no'
#8%軽減税率の売上金額が0である行をリストにする
df_drop = df_uriage_8[df_uriage_8['I'] == 0]
#売上金額が0である行を削除してDateframeを更新する
df_uriage_8.drop(df_drop.index,inplace = True)
#csvファイルに書き込み
df_uriage_8.to_csv('py_uriage.csv',encoding = 'cp932'\
,header = False,index = False)
#10%標準税率のデータ作成
df_uriage_10 = pd.DataFrame(index=[i for i in range(j)]\
, columns=['A','B','C','D','E','F','G','H','I' ,'J'\
,'K','L','M','N','O','P','Q','R','S','T','U'\
,'V','W','X','Y'])
#要素の転記
df_uriage_10['A'] = 2000
df_uriage_10['B'] = ''
df_uriage_10['C'] = ''
df_uriage_10['D'] = df['O']
df_uriage_10['E'] = '仮払金'
df_uriage_10['F'] = '売上'
df_uriage_10['G'] = ''
df_uriage_10['H'] = '対象外'
df_uriage_10['I'] = df['U']
df_uriage_10['J'] = 0
df_uriage_10['K'] = '売上高商品'
df_uriage_10['L'] = ''
df_uriage_10['M'] = ''
df_uriage_10['N'] = '課税売上内10%'
df_uriage_10['O'] = df['U']
df_uriage_10['P'] = (df['U'] - df['U']/1.1).map(r_round)
df_uriage_10['Q'] = '本日売上高'
df_uriage_10['R'] = ''
df_uriage_10['S'] = ''
df_uriage_10['T'] = 0
df_uriage_10['U'] = ''
df_uriage_10['V'] = ''
df_uriage_10['W'] = 0
df_uriage_10['X'] = 0
df_uriage_10['Y'] = 'no'
#10%標準税率の売上金額が0である行をリストにする
df_drop = df_uriage_10[df_uriage_10['I'] == 0]
#売上金額が0である行を削除してDateframeを更新する
df_uriage_10.drop(df_drop.index,inplace = True)
#csvファイルに書き込み(追加)
df_uriage_10.to_csv('py_uriage.csv',mode = 'a'\
,encoding = 'cp932',header = False,index = False)
軽減税率の売上データと標準税率の売上データを分けて作成しています。
消費税込みの金額から消費税額を計算する部分で、
df_uriage_8[‘P’] = (df[‘T’] – df[‘T’]/1.08).map(r_round)
という記述があります。”税込金額”から”税込金額を1.08で除して四捨五入した金額”を引いた金額を消費税額に設定しています。
Pythonのround関数で書くこともできますが、調べてみるとround関数はVBAと違って四捨五入ではないようなので、代わりに
int(Decimal(str(x)).quantize(Decimal(‘0’)\ ,rounding=ROUND_HALF_UP))
という計算式を使いたいのですが、直接記述するとエラーになってしまうので”r_round”という名前の関数を定義してmap()という記述の仕方を使うことにしました。これにより、VBAでround関数を使用した場合と同じ結果を得ることができました。