はじめに: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と指定します。
まとめ:絞り込みと並べ替えを自動化しよう!
今回は、openpyxlのAutoFilter機能を使った、データ操作の基本中の基本を解説しました。
- Step 1:
ws.auto_filter.ref = 範囲でフィルタのスイッチを入れる。 - Step 2:
add_filter_column()で特定の列を絞り込む。 - Step 3:
add_sort_condition()で指定した範囲を並べ替える。
この3ステップを覚えるだけで、これまで手作業で行っていた面倒なExcel作業の多くを自動化できます。ぜひAutoFilterをあなたのPythonスクリプトに取り入れて、日々の業務効率をアップさせてください。


コメント