• #売上データ
  • #訂正仕訳
  • #Google Spreadsheet
  • #gog CLI
  • #商品有高帳
  • #会計ソフト連携
開発tax-assistantメモ

売上データ分析とスプレッドシート連携

朝、クライアントの売上データを月別に集計してほしいという依頼が来た。DBを叩いて数字を出し、スプレッドシートに流し込む -- そこまでなら1時間で終わるはずだった。ところが単価で割った個数が割り切れないデータが混じっていて、そこから原因調査、データ修正、訂正仕訳の作成、スプレッドシートへの再書き込みと、一日かけて何度もデータを行き来することになった。

DB照会と月別集計

特定商品の売上データをDBから引き出し、月別に集計した。対象期間の売上レコードを抽出し、月ごとの合計金額と取引件数を出す。

クエリ自体は単純だが、集計結果を眺めていて違和感に気づいた。売上金額を商品単価で割って個数を逆算したとき、割り切れない行がいくつかある。小数点以下が出るのは、元データのどこかがおかしい。

端数発生の原因調査

個数が整数にならないデータを1行ずつ追いかけた。原因は複数パターンあった。

  • 単価変更後のデータに旧単価が残っている行
  • 複数商品の合算が1行にまとめられている行
  • 値引き・割引が売上金額から直接差し引かれている行

元帳と突き合わせて、どの行が正しくてどの行を修正すべきかを切り分けた。修正対象のデータを洗い出し、正しい金額・個数に書き換えた。

訂正仕訳の作成

データ修正に伴い、会計上の訂正仕訳が必要になった。特定商品の売上を未払金に振り替える訂正仕訳を作成した。

仕訳のパターンは次の通り。

借方貸方内容
売上高未払金過大計上分の取消
未収入金売上高正しい金額での再計上

訂正仕訳は「元の仕訳を打ち消す逆仕訳 + 正しい仕訳」のペアで作る。片方だけだと残高が合わなくなる。この原則を守りながら、対象行ごとに仕訳データを組み立てた。

Google Spreadsheetへの書き込み

作成した訂正仕訳データをGoogle Spreadsheetに書き込んだ。gog CLIを使ってコマンドラインからシートを操作した。

# セル範囲を指定してデータを書き込む
gog sheet write --spreadsheet-id "..." --range "Sheet1!A2:F10" --values "..."

gog CLIはGoogle Workspace APIのラッパーで、スプレッドシートの読み書きをターミナルから実行できる。GUIでセルをポチポチ入力するよりも、データが構造化されている場合はCLI経由の方が速い。

ただし、書き込んだ後にスプレッドシートを開いて目視確認するステップは省略できない。セル範囲のズレや数値フォーマットの違いで、意図しない場所にデータが入ることがある。

商品有高帳シートへの入力

訂正仕訳とは別に、商品有高帳のシートにも日付・金額・個数を入力した。商品有高帳は在庫の受払記録で、売上データの修正と連動して更新が必要になる。

入力項目は日付、受入金額、払出金額、数量。DB側で修正したデータをそのままシートに転記した。

会計ソフトインポート用シートへの仕訳書き込み

会計ソフトへのインポート用に、別シートへ仕訳データを書き込んだ。未収入金と売上の仕訳を、会計ソフトが受け付けるフォーマットに揃えて出力した。

ここで不整合が見つかった。商品有高帳の数量と仕訳の金額が合わない行がある。原因を追うと、端数処理の修正を商品有高帳側に反映し忘れていた。修正してgog CLIで再書き込み。

この「書き込む→確認→不整合発見→修正→再書き込み」のサイクルを3回ほど繰り返した。1回で通らないのは、複数のシートに同じデータの別表現が散らばっているからだ。商品有高帳は数量ベース、仕訳は金額ベース、インポート用シートは会計ソフトのフォーマット -- 同じ取引が3つの形で存在していて、どれか1つを直すと他の2つも追従させなければならない。

振り返り

売上データの個数が割り切れない行を見つけた瞬間、「これは1時間では終わらない」と腹をくくった。実際、午前中いっぱいかけて原因を特定し、午後は訂正仕訳の作成とスプレッドシートへの書き込み・再書き込みに費やした。

gog CLIでスプレッドシートを操作する流れ自体は手に馴染んできた。問題は、複数シート間のデータ整合性を手動で保つ作業にある。商品有高帳・仕訳・インポート用シートという3つの表現を同期させるのに時間を取られた。本来はDBの修正データから3シート分を一括生成するスクリプトを組むべきだが、今回はデータ件数が少なかったので手作業で回した。件数が増えたら一括生成の仕組みを作りたい。

訂正仕訳は「逆仕訳 + 正しい仕訳」のペアを崩さないことが鉄則だと改めて確認した。片方だけ書いて残高が合わなくなり、30分ほど原因を探し回った場面があった。仕訳を1本作ったら必ずペアのもう1本も同時に作る -- この手順をスクリプトに組み込めば、人為的な漏れを防げる。