【Python×Excel操作】Excelへのデータの書き込み方法

システム開発
このサイトはアフィリエイト広告を掲載しています。

この記事のレベル

難易度2.5
実用性4.5
学習コスト2.0
この記事でわかること
  • Python(openpyxl)でExcelにデータを書き込む方法
takata
takata

この記事はこんな人におすすめ!

  • PythonでExcelファイルをレポート形式に整形したい人
  • 集計処理や列の追加など、Excelの自動加工を行いたい実務担当者
  • openpyxl の使い方を、読み取り処理から一歩進めて学びたい初学者

はじめに

PythonでExcelファイルを操作できるようになると、日々のルーチン業務を自動化したり、作業時間を大幅に短縮したりすることができます。

たとえば、以下のような業務フローがPythonコードで簡単に実現できます。

  1. 売上管理表(Excelファイル)を読み込み
  2. 特定の店舗(例:東京店)のデータを抽出
  3. 抽出結果に合計行やコメントなどを書き込み
  4. 日付付きファイル名で新しいExcelファイルを出力

今回は、実際に「東京店の売上データを抽出・加工してレポートを自動作成する」例を交えながら、PythonでExcelファイルを操作する方法を4つの記事に分けて説明します。

本記事ではこの中から、Leeson 3 Excelへのデータの書き込み方法について詳しく紹介します。

まずは全体のコードを確認しよう

まずは、Lesson1~4で学ぶコードの全体像を把握しましょう。以下のコードによりExcelの読み込みから加工、保存までを一気に自動化することができます。

とはいえ、はじめて見ると「何をやっているのかよくわからない…」と感じる方もいると思います。

次の章でExcelへのデータの書き込み方法について詳しく紹介していきますのでご安心を!

import openpyxl
from openpyxl import Workbook
from datetime import date

# ----------------------------------------
# Lesson 1:Excelファイルの読み込み
# ----------------------------------------
wb = openpyxl.load_workbook("zenkoku_sales_data.xlsx")
ws = wb.active

# ----------------------------------------
# Lesson 2:条件を満たすデータの抽出
# (ヘッダー行:3行目、データ:4行目~)
# ----------------------------------------
header = [cell.value for cell in ws[3]]  # 3行目のヘッダー取得
filtered_rows = []

for row in ws.iter_rows(min_row=4, values_only=True):  # データは4行目以降
    if row[1] == "東京店":  # B列(店舗名)が「東京店」
        filtered_rows.append(list(row))  # 値をリスト形式で保存

# ----------------------------------------
# Lesson 3:データの整形とシートへの書き込み
# (備考列、合計行の追加/Excelシートへ書き込み)
# ----------------------------------------
# 備考列の追加
header.append("備考")
for row in filtered_rows:
    row.append("")  # 備考欄は空欄

# 合計計算
total_quantity = sum(row[3] for row in filtered_rows)  # D列:売上数量
total_amount = sum(row[4] for row in filtered_rows)    # E列:売上金額

# 合計行の追加
filtered_rows.append(["", "東京店", "合計", total_quantity, total_amount, "自動集計行"])

# 新しいブックとシート作成
new_wb = Workbook()
new_ws = new_wb.active
new_ws.title = "東京店レポート"

# ヘッダー行の書き込み
new_ws.append(header)

# データ行の書き込み
for row in filtered_rows:
    new_ws.append(row)

# ----------------------------------------
# Lesson 4:Excelファイルの出力(保存処理)
# ----------------------------------------
today = date.today().strftime("%Y%m%d")
store_name = "東京店"
filename = f"{today}_{store_name}_sales_data.xlsx"

new_wb.save(filename)

print(f"レポートを保存しました: {filename}")

Excelへのデータの書き込み方法

Lesson2では、「東京店」のデータだけを抽出し filtered_rows に格納しました。

Lesson 3では、この抽出結果をレポートとして使えるように整形し、新しいExcelシートに書き込む処理を行います。具体的には、以下の3つの処理を実装します。

  • 備考列の追加(ヘッダーと各行の末尾に空欄を追加)
  • 合計行の追加(売上数量・売上金額の合計を最後の行に追加)
  • 新しいExcelシートへの書き込み(整形後のデータを1行ずつ書き込み)

Excelへデータを書き込む基本コード

# 備考列の追加
header.append("備考")
for row in filtered_rows:
    row.append("")  # 備考欄は空欄

# 合計計算
total_quantity = sum(row[3] for row in filtered_rows)  # D列:売上数量
total_amount = sum(row[4] for row in filtered_rows)    # E列:売上金額

# 合計行の追加
filtered_rows.append(["", "東京店", "合計", total_quantity, total_amount, "自動集計行"])

# 新しいブックとシート作成
new_wb = Workbook()
new_ws = new_wb.active
new_ws.title = "東京店レポート"

# ヘッダー行の書き込み
new_ws.append(header)

# データ行の書き込み
for row in filtered_rows:
    new_ws.append(row)

備考列の追加

# 備考列の追加
header.append("備考")
for row in filtered_rows:
    row.append("")  # 備考欄は空欄

このコードは、「備考」という列をヘッダーと各データ行に追加する処理です。

  • header.append("備考") は、Excelのヘッダー行に新しい列「備考」を追加している処理です。
  • for row in filtered_rows: row.append("") は、抽出済みデータ(filtered_rows)の各行の末尾に空の値("")を追加しています。こうすることで、「列の数」と「各行の値の数」が一致し、後続のExcel出力時に不整合が起きません。

合計行の追加

# 合計計算
total_quantity = sum(row[3] for row in filtered_rows)  # D列:売上数量
total_amount = sum(row[4] for row in filtered_rows)    # E列:売上金額
# 合計行の追加
filtered_rows.append(["", "東京店", "合計", total_quantity, total_amount, "自動集計行"])

このコードは、「東京店」の売上データを集計し、最終行に「合計行」を追加する処理です。

  • total_quantity = sum(row[3] for row in filtered_rows) は、各行の「売上数量(4列目=index 3)」を取り出し、合計しています。
  • total_amount = sum(row[4] for row in filtered_rows) は、各行の「売上金額(5列目=index 4)」を合計しています。
  • filtered_rows.append(…) は、上で計算した数量・金額の合計を1行として filtered_rows の末尾に追加しています。

新しいExcelシートへの書き込み

# 新しいブックとシート作成
new_wb = Workbook()
new_ws = new_wb.active
new_ws.title = "東京店レポート"

# ヘッダー行の書き込み
new_ws.append(header)

# データ行の書き込み
for row in filtered_rows:
    new_ws.append(row)

こちらのコードは、整形・集計済みのデータを新しいExcelシートに書き込む処理です。

  • new_wb = Workbook() は、これで新規の .xlsx ファイルの「枠」が作られます。
  • new_ws = new_wb.active は、new_wsという変数に「操作対象のシート」を代入しています。
  • new_ws.title = "東京店レポート" は、シート名を変更しています。
  • new_ws.append(header) は、ヘッダー(列名)をExcelシートの1行目に書き込んでいます。
  • for row in filtered_rows: new_ws.append(row) は、filtered_rows に格納されている売上データと合計行を、1行ずつExcelに書き込んでいる処理です。

まとめ

今回は、Pythonと openpyxl を使って、Excelファイルへデータを書き込む方法を解説しました。

この記事のポイント
  • header.append("備考") を使って、ヘッダー行に新しい列(備考)を追加する方法がわかる
  • for row in filtered_rows: row.append("") で、各データ行にも空欄の備考列を追加できる
  • sum() 関数を使って、売上数量や金額の合計を簡単に集計する方法を学べる
  • filtered_rows.append([...]) により、合計行を自動で末尾に追加できる
  • Workbook()append() を使って、新しいExcelシートに1行ずつデータを書き込む方法が身につく

次の Lesson4では、今回抽出したデータに対して、

  • ファイル名に日付と店舗名を付ける
  • 実際の .xlsx ファイルとして保存する

といった、Excelファイルの出力を行っていきます。

さらに学びたい方へ

「ワンランク上のビジネススキルを身につけたい」

そんな方に注目されているのが、オンライン学習サービスです。

中でも特におすすめなのが、人気の2大サービスSchoo(スクー) Udemy(ユーデミー) icon

特徴や違いを比較しながら、あなたに合った選び方をわかりやすく解説します。

SchooとUdemyの特徴は?

あなたに向いているのはSchoo?Udemy?

Schoo(スクー)がおすすめな人
  • まずは無料で試してみたい人
  • 月額定額で色んな講座を受けたい人
  • ビジネススキル全般を学びたい人
  • 隙間時間でスキルアップしたい人
\ Schooプレミアム 7日間お試し”無料” /

Udemy(ユーデミー)がおすすめな人
  • 講座単位で支払いをしたい人
  • 特定の知識・スキルを学びたい人
  • 学習の時間を集中的に確保できる人
\ 購入後30日以内であれば”返金可能” /

コメント