【Python×Excel操作】条件を満たすデータの抽出方法

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

この記事のレベル

難易度2.5
実用性4.5
学習コスト2.0
この記事でわかること
  • openpyxl を使って、Excelのデータ行を1行ずつ取得する方法
  • ws.iter_rows() の基本的な使い方とオプション(min_rowvalues_only)の意味
takata
takata

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

  • PythonでExcelの特定データだけを取り出したい人
  • openpyxl の基本的な使い方から一歩進んだ活用方法を知りたい人

はじめに

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

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

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

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

本記事ではこの中から、Leeson 2 条件を満たすデータの抽出方法について詳しく紹介します。

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

まずは、Lesson1~4で学ぶコードの全体像を把握しましょう。以下のコードにより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}")

条件を満たすデータの抽出方法

Lesson2でやりたいこと

Lesson1で読み込んだExcelファイルには、全国すべての店舗の売上データが記録されています。

今回はLesson2として、この中から「東京店」のデータだけを抽出する処理を行います。

条件を満たすデータを抽出する基本コード

# ② ヘッダー(3行目)を取得
header = [cell.value for cell in ws[3]] 

# 条件を満たす行(東京店)を格納するリスト
filtered_rows = []

# データ行(4行目以降)を1行ずつ読み込む
for row in ws.iter_rows(min_row=4, values_only=True):
    if row[1] == "東京店":
        filtered_rows.append(list(row))

各コードの解説

① ヘッダー行の取得

header = [cell.value for cell in ws[3]]
  • Excelの3行目にあるセルの値をすべて取得して、header というリストにまとめている処理です。
  • ws[3] は「3行目=ヘッダー行」を意味します。
  • openpyxl では、ws[3] のようにインデックスでアクセスすることで、その行のすべてのセルが取得されます。

② 条件に合う行の抽出

for row in ws.iter_rows(min_row=4, values_only=True):
if row[1] == "東京店":
filtered_rows.append(list(row))
  • Excelシートの4行目以降を1行ずつ読み取り、「店舗名」が”東京店”である行だけを抽出して filtered_rows に追加する処理です。
  • for row in ws.iter_rows(min_row=4, values_only=True) は 、Excelシート(ws)の4行目以降の行を1行ずつ取り出して処理するためのループです。
💡 さらに理解を深めたい方

さらに理解を深め、ワンランク上のエンジニアになりたい方は、Schoo(スクー)がおすすめです。

Pythonの実践講座をはじめ、エンジニアに必要な幅広い授業を、無料登録だけでいつでも受講可能です。

Schooで無料講座をチェックする

まとめ

今回は、Pythonと openpyxl を使って、Excelファイルから特定の条件(例:店舗名が「東京店」)に一致するデータだけを抽出する方法を解説しました。

この記事のポイント
  • ws.iter_rows() を使えば、Excelの行を1行ずつ取り出して処理できる
  • min_row=4 のように指定することで、必要な行のデータを対象にできる
  • if row[1] == "東京店" のように条件を指定すれば、必要な行だけ抽出できる

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

  • 「合計行」を追加する
  • 「備考」などの列を追加して整形する

といった、Excelへのデータの書き込みを行っていきます。

💡 学びを続けてキャリアを広げよう

社会人向けオンライン学習サービス 「Schoo(スクー)」 では、
ビジネス・マネジメント・IT・業務効率化など、現場で役立つテーマを 無料登録だけで学べます。
忙しい社会人でも、15分から気軽に学習できるのが魅力です。

  • 現役PM・エンジニア・経営者による実践講座
  • ビジネススキルから最新ITトレンドまで幅広くカバー
  • 無料登録だけで人気授業をすぐ視聴可能
✅ 無料でSchooに登録して今すぐ学ぶ

コメント