PythonでExcelファイルを読み込み 編集 CSVファイルに出力する TERAOKAのレジのデータ(2)

以前のプログラムで「teraoka_shukei.xlsx」というファイルを作成しましたが、このファイルから弥生会計への入力用データを作成します。

  1. 売上を計上するデータ
  2. 売上金額を現金売上と売掛金(クレジットカード・paypay)に振替するデータ
  3. 現金売上の金額を預金口座に入金するデータ

の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関数を使用した場合と同じ結果を得ることができました。

 

 

 

 

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