openpyxl FilterColumn入門:特定の列にフィルタを適用する方法

openpyxl

はじめに:Excelオートフィルタ、特定の列だけ絞り込みたい!

PythonとopenpyxlでExcelのオートフィルタを設定する際、ws.auto_filter.ref = "A1:D10"と範囲を指定しただけでは、ただの「枠」が設定されるだけです。実際にデータを絞り込むには、「どの列を」「どの値で」フィルタリングするかをopenpyxlに教えてあげる必要があります。

この記事は、openpyxlを使い始めたばかりの初心者の方向けに、特定の列に狙いを定めてオートフィルタを適用するための基本となるFilterColumnの考え方と、簡単な実装方法を解説する入門ガイドです。


FilterColumnとは?列を指定するための「指示書」

FilterColumnは、その名の通り、オートフィルタを適用する**「列(Column)」**を指定し、その列にどんなフィルタをかけるかを定義するためのクラスです。

openpyxlでオートフィルタをかける基本的な流れは、以下のようになります。

  1. シート全体にオートフィルタの範囲を設定する。
  2. FilterColumnを使って「○番目の列に、△△というフィルタをかけてください」という指示書を作成する。
  3. その指示書を、シートのオートフィルタ設定に追加する。

この「指示書」の考え方を理解することが、フィルタ設定の第一歩です。


実践:特定の列を絞り込む一番簡単な方法

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自動化の第一歩を踏み出しましょう。

コメント

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