openpyxl AutoFilter入門:Pythonでデータ絞り込みと並べ替えを自動化

openpyxl

はじめに:Excelの面倒な「絞り込み」と「並べ替え」を自動化しよう

Excelでデータを扱うとき、最も頻繁に行う操作は何でしょうか?おそらく、それは特定の条件に合うデータだけを表示する**「絞り込み(フィルタ)」と、数値を大きい順や小さい順に並べる「並べ替え(ソート)」**でしょう。

これらの手作業は、データ量が増えるほど時間もかかり、ミスの原因にもなります。しかし、Pythonのopenpyxlライブラリを使えば、これらの操作を完全に自動化できます。

この記事は、openpyxlを学び始めたばかりのあなたに向けた入門ガイドです。AutoFilter機能の基本を学び、面倒なデータの前処理作業をPythonに任せてしまいましょう!


Step 1: オートフィルタの「スイッチ」を入れる

何よりもまず、openpyxlに「このシートでオートフィルタを使いますよ」と宣言する必要があります。これは、フィルタを適用したい範囲をws.auto_filter.refに設定することで行います。

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "AutoFilter_Intro"

# これから使うサンプルデータ
ws.append(["都市", "カテゴリー", "売上"])
data = [
    ("東京", "雑貨", 300), ("大阪", "食品", 450),
    ("東京", "文具", 150), ("福岡", "雑貨", 250),
    ("大阪", "文具", 200), ("東京", "食品", 500),
]
for row in data:
    ws.append(row)

# A1からC7の範囲にオートフィルタのスイッチを入れる
ws.auto_filter.ref = "A1:C7"
# ws.dimensions を使うと、データのある範囲全体を自動で指定できます
# ws.auto_filter.ref = ws.dimensions

wb.save("autofilter_setup.xlsx")
print("オートフィルタを設定したファイルを作成しました。")

このコードを実行してautofilter_setup.xlsxを開くと、ヘッダー行(1行目)にフィルタの▼ボタンが表示されているはずです。これが自動化の準備完了の合図です。


Step 2: データを「絞り込む」(フィルタリング)

準備ができたら、いよいよデータの絞り込みです。openpyxlでは、add_filter_columnという命令を使うと、とても簡単に特定の列を絞り込めます。

都市が「東京」のデータだけを表示する

add_filter_columnには、**列の番号(A列=0, B列=1…)**と、絞り込む値のリストを渡します。

from openpyxl import load_workbook

wb = load_workbook("autofilter_setup.xlsx")
ws = wb.active

# フィルタ範囲を設定(読み込んだファイルにも必要)
ws.auto_filter.ref = ws.dimensions

# A列 (インデックス=0) を「東京」という値で絞り込む
ws.auto_filter.add_filter_column(0, ["東京"])

wb.save("autofilter_filtered_tokyo.xlsx")
print("「東京」で絞り込んだファイルを保存しました。")

ファイルを開くと、都市が「東京」のデータだけが表示されていることが確認できます。

「東京」または「福岡」のデータを表示する

複数の値で絞り込みたい(OR条件)場合は、リストに値を追加するだけです。

Python

# A列 (インデックス=0) を「東京」または「福岡」で絞り込む
ws.auto_filter.add_filter_column(0, ["東京", "福岡"])
Code language: PHP (php)

Step 3: データを「並べ替える」(ソート)

データの絞り込みと並んでよく使うのが、並べ替え機能です。openpyxlではadd_sort_conditionという命令で実行できます。

売上を「多い順」に並べ替える

売上が入っているC列を基準に、降順(多い順)で並べ替えてみましょう。

from openpyxl import load_workbook

wb = load_workbook("autofilter_setup.xlsx")
ws = wb.active

# フィルタ範囲を設定
ws.auto_filter.ref = ws.dimensions

# C2からC7の範囲を降順(descending=True)で並べ替える
# ヘッダーは含めないのが一般的
ws.auto_filter.add_sort_condition("C2:C7", descending=True)

wb.save("autofilter_sorted_sales.xlsx")
print("売上を多い順に並べ替えたファイルを保存しました。")

ファイルを開くと、売上の数値が大きい行から順に並び替えられています。もし昇順(少ない順)にしたい場合は、descending=Trueを削除するか、descending=Falseと指定します。


まとめ:絞り込みと並べ替えを自動化しよう!

今回は、openpyxlAutoFilter機能を使った、データ操作の基本中の基本を解説しました。

  • Step 1: ws.auto_filter.ref = 範囲 でフィルタのスイッチを入れる。
  • Step 2: add_filter_column() で特定の列を絞り込む。
  • Step 3: add_sort_condition() で指定した範囲を並べ替える。

この3ステップを覚えるだけで、これまで手作業で行っていた面倒なExcel作業の多くを自動化できます。ぜひAutoFilterをあなたのPythonスクリプトに取り入れて、日々の業務効率をアップさせてください。

コメント

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