オートフィルタは範囲に対して設定し、列ごとに絞り込み条件を持ちます。

フィルタ適用中。見出しに ▽ ボタンが出て、対象外の行が隠れる

設定と値リスト

using unvell.ReoGrid.Core.Filtering;

AutoFilter filter = ws.CreateAutoFilter(RangePosition.Parse("A1:D100"));

// 値リストで絞る(チェックボックス方式)
filter.SetColumnFilter(1, ["東京", "大阪"]);
filter.Apply();

bool active = filter.HasActiveFilter;
filter.ClearColumn(1);
filter.ClearAll();

ws.RemoveAutoFilter();

範囲の先頭行が見出し行として扱われ、そこにフィルタボタンが描かれます。

SetColumnFilter に渡すのは表示文字列の集合です(数値書式を適用した後の文字列)。 null を渡すとその列の値リストによる絞り込みが解除されます。

Apply() を呼ぶまで行の表示状態は変わりません。 複数列の条件をまとめて設定してから 1 回だけ適用してください。

条件フィルタ

// 単一条件
filter.SetColumnCondition(2, new FilterCondition(FilterOperator.GreaterThan, "1000"));

// 2 句を And / Or で結合(Excel の「オートフィルター オプション」相当)
filter.SetColumnCondition(3, new FilterCondition(
	new FilterClause(FilterOperator.GreaterOrEqual, "2026-01-01"),
	new FilterClause(FilterOperator.LessThan, "2027-01-01"),
	and: true));

filter.Apply();

FilterOperator は 10 種類です。

種別演算子
等価Equals NotEquals
大小GreaterThan GreaterOrEqual LessThan LessOrEqual
文字列Contains NotContains BeginsWith EndsWith

オペランドは文字列で渡しますが、数値や日付として解釈できる場合は型付きで比較されます。

  • "> 5" → 数値比較。文字列のセルは一致しません
  • ">= 2026-02-01" → 日付比較

文字列演算子(Contains など)は表示文字列に対して大文字小文字を区別せず照合します。

空のセルは常に不一致です(Excel と同じ)。

同じ列に値リストと条件の両方を設定した場合、両方を満たす行が残ります(AND)。

候補の取得

// ドロップダウンに出す候補(重複を除いた表示文字列)
List<string> values = filter.GetColumnValues(1);
string title = filter.GetColumnTitle(1);

bool filtered = filter.IsColumnFiltered(1);

独自の UI を作る場合に使います。標準のコントロールはこれを使ってドロップダウンを構築しています。

非表示の 2 系統

フィルタによる非表示は、ユーザーが手で隠した行と区別して管理されます。

API対象
ws.Rows.IsFilterHidden(i)フィルタが隠した
ws.Rows.IsUserHidden(i)ユーザーが隠した
ws.Rows.IsHidden(i)どちらか

分けてある理由は、フィルタを解除したときにユーザーが隠した行まで復活させないためです。

ソートとの関係

非表示の行はソート対象から除外されます。フィルタで絞った状態でのソートは、 表示されている行だけを並び替えます。

範囲とボタン

メンバー内容
filter.Rangeフィルタの適用範囲
filter.HeaderRow / FirstDataRow / LastDataRow行の境界
filter.IsButtonCell(row, col)そのセルにボタンが描かれるか
filter.Changed条件が変わったときのイベント

フィルタボタンは任意のセルに描画できる汎用オーバーレイとして実装されています (XXXX │▽ の形)。将来のテーブル機能やピボットが同じ仕組みを使えるようにするためです。

UI から使う

メンバー内容
control.ToggleAutoFilter()選択範囲にフィルタを設定・解除

保存

reogrid-json と XLSX(<autoFilter>)の両方に往復します。範囲・列ごとの値リスト (<filters>)・条件(<customFilters>)が保存されます。

Excel には contains 演算子が無いため、テキスト系の演算子は *text* のような ワイルドカード付きの等値として書き出し、読み戻しで復元します。日付グループのツリーと 色/アイコン/動的フィルタは対象外で、それだけを持つ列はフィルタ無しとして読み込まれます。 ストリーミング読込(OpenVirtual)では行が遅延ロードのため対象外です。

次に読む

ページの内容は役に立ちましたか?