はじめに:Excelオートフィルタ、特定の列だけ絞り込みたい!
PythonとopenpyxlでExcelのオートフィルタを設定する際、ws.auto_filter.ref = "A1:D10"と範囲を指定しただけでは、ただの「枠」が設定されるだけです。実際にデータを絞り込むには、「どの列を」「どの値で」フィルタリングするかをopenpyxlに教えてあげる必要があります。
この記事は、openpyxlを使い始めたばかりの初心者の方向けに、特定の列に狙いを定めてオートフィルタを適用するための基本となるFilterColumnの考え方と、簡単な実装方法を解説する入門ガイドです。
FilterColumnとは?列を指定するための「指示書」
FilterColumnは、その名の通り、オートフィルタを適用する**「列(Column)」**を指定し、その列にどんなフィルタをかけるかを定義するためのクラスです。
openpyxlでオートフィルタをかける基本的な流れは、以下のようになります。
- シート全体にオートフィルタの範囲を設定する。
FilterColumnを使って「○番目の列に、△△というフィルタをかけてください」という指示書を作成する。- その指示書を、シートのオートフィルタ設定に追加する。
この「指示書」の考え方を理解することが、フィルタ設定の第一歩です。
実践:特定の列を絞り込む一番簡単な方法
openpyxlには、このFilterColumnを使ったフィルタ設定を、より簡単に行うための便利な命令が用意されています。まずはその一番簡単な方法からマスターしましょう。
Step 1: フィルタをかけるデータを用意する
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "FilterColumn_Intro"
ws.append(["商品ID", "カテゴリ", "価格"])
data = [
("A01", "文房具", 120),
("B01", "食品", 350),
("A02", "文房具", 80),
("C01", "雑貨", 500),
("B02", "食品", 210),
]
for row in data:
ws.append(row)
wb.save("products.xlsx")
print("サンプルファイルを作成しました。")Step 2: add_filter_columnでカテゴリ列を絞り込む
カテゴリ列(B列)を「文房具」という値で絞り込んでみましょう。
from openpyxl import load_workbook
wb = load_workbook("products.xlsx")
ws = wb.active
# 1. オートフィルタの範囲を設定
ws.auto_filter.ref = ws.dimensions
# 2. B列(インデックス=1)を「文房具」という値で絞り込む
# add_filter_column(列のインデックス, [絞り込みたい値のリスト])
ws.auto_filter.add_filter_column(1, ["文房具"])
wb.save("products_filtered.xlsx")
print("B列を「文房具」で絞り込んだファイルを保存しました。")products_filtered.xlsxを開いてみてください。カテゴリが「文房具」の行だけが表示されているはずです。たった2行で、特定の列へのフィルタ適用が完了しました!
ポイント:列のインデックスは「0」から始まる add_filter_columnで列を指定する際、A列が0、B列が1、C列が2…というように、0から始まる番号で指定することを忘れないようにしましょう。
FilterColumnの裏側(少しだけ詳しく)
先ほど使ったadd_filter_columnは、実は内部でFilterColumnオブジェクトを自動的に作成してくれています。
手動でFilterColumnを使って書くと、先ほどのコードは以下のようになります。
from openpyxl.worksheet.filters import FilterColumn, Filters
# ... (ファイルのロード部分は同じ) ...
ws.auto_filter.ref = ws.dimensions
# 【手動で設定する場合】
# 1. FilterColumnオブジェクトを作成。B列なのでcolId=1
col = FilterColumn(colId=1)
# 2. フィルタ条件を作成
vals = Filters(filter=["文房具"])
col.filters = vals
# 3. オートフィルタに列ごとの設定を追加
ws.auto_filter.filterColumn.append(col)
# ... (保存部分は同じ) ...add_filter_columnは、この少し複雑な手順を一行で実行してくれる、便利なショートカットなのです。まずは簡単な方法に慣れ、より複雑な設定(「〜以上」など)が必要になったら、FilterColumnを直接使う方法を学んでいくのがおすすめです。
複数の値を指定して絞り込む
「文房具」と「雑貨」の両方を表示したい場合は、リストに値を追加するだけです。
Python
# B列を「文房具」または「雑貨」で絞り込む
ws.auto_filter.add_filter_column(1, ["文房具", "雑貨"])
Code language: CSS (css)
まとめ:まずはadd_filter_columnから始めよう
openpyxlで特定の列にフィルタを適用する方法を解説しました。
- **
FilterColumn**は、特定の列にフィルタを設定するための「指示書」。 - 最も簡単な方法は**
ws.auto_filter.add_filter_column()**を使うこと。 add_filter_column(列のインデックス, [値のリスト])と覚える。- 列のインデックスはA列=0から始まる。
Excelの列を絞り込む操作は、データ分析の基本中の基本です。この入門編で紹介したadd_filter_columnをマスターし、あなたのExcel自動化の第一歩を踏み出しましょう。


コメント