CSVのフィルター(絞り込み)は、ひとまとめにされがちな2つの作業です。条件に合う行だけを表示することと、その行だけを新しいファイルとして保存することです。1つ目はどのツールでもうまくできます。罠があるのは2つ目で、フィルター結果が40行しか表示されていなくても、表計算ソフトは40,000行すべてを平然と保存します。
結論を先に
- 条件に合う行を見る: ExcelまたはSheetsで データ → フィルター を選び、値を指定します。
- 条件に合う行だけを保存する: フィルターをかけ、表示されている行を選択して新しいシートにコピーし、そのシートを保存します。フィルター結果を直接書き出せるツールを使う方法もあります。
- 大きなファイル、または繰り返す作業: 下で紹介する
csvgrep、mlr、DuckDB のコマンド1つで済みます。 - スマートフォンで: 変換した表計算ファイルではなく、本格的なフィルターパネルを備えたCSVアプリを使います。
Excelの場合
- データ内の任意のセルをクリックし、Ctrl+Shift+L(Macは ⌘+Shift+F)を押すか、データ → フィルター を選びます。
- 列見出しの矢印から値を選ぶか、数値フィルター / テキストフィルター で「より大きい」「を含む」などの条件を指定します。
- 複数の列のフィルターを組み合わせられます。重ねるほど結果は絞り込まれます。
フィルター結果だけを保存するには: 表示されている範囲を選択してコピーし、新しいシートに貼り付けて、そのシートをCSVとして保存します。オートフィルターがかかった範囲をコピーすると、Excelは表示されている行だけをコピーします。
罠: フィルターをかけたシートそのものをCSVとして保存すると、非表示の行も含めてすべての行が書き出されます。フィルターは表示を変えるだけで、データを変更するわけではありません。
列をまたいだOR(国がドイツ、または売上が10,000超の行)は、列同士をANDでしか結べないオートフィルターではできません。データ → 詳細設定 で条件範囲を使うと、別々の行に書いた条件がORで結ばれます。指定した範囲 にチェックを入れれば、結果を別の場所へ一度に書き出せます。
また、これはCSVなので、IDや郵便番号、桁数の長い数値が含まれている場合は、ダブルクリックではなくインポートで開いてください。そうしないと、絞り込みに使う値がすでに書き換わっている可能性があります。ExcelがCSVのデータを勝手に変更するのを防ぐ方法を参照してください。
Googleスプレッドシート(Google Sheets)の場合
データ → フィルタを作成 はExcelと同じように使えます。ただ、この作業にはもっと便利な FILTER 関数があります。条件に合う行を別の場所に書き出し、常に最新の状態に保ってくれます。
=FILTER(A2:F, C2:C="Europe", E2:E<2000)
条件を追加するとANDで結ばれます。ORにしたいときは足し算にします: (C2:C="Europe")+(C2:C="Asia")。この数式を新しいタブに入れれば、そのタブがフィルター済みのファイルになります。そのタブを開いた状態で ファイル → ダウンロード → CSV を選びます。
コマンドラインの場合
表計算ソフトでは扱えない大きなファイルや、毎週実行するフィルターなら、クリックで作業するよりコマンドのほうが速く、毎回同じ結果になります。
grep は便利そうに見えて間違いのもとです。 行のどこにあってもテキストに一致するので、grep Europe は備考に「not Europe」と書かれた行にも一致します。ヘッダー行も落ちます。さらに awk -F, は、引用符で囲まれたフィールド内のカンマも含めてすべてのカンマで分割します。CSVを理解するツールを使いましょう。
csvkit:1つの列に対する完全一致またはパターン一致。
csvgrep -c country -m "Germany" in.csv > germany.csv
csvgrep -c email -r "@example\.com$" in.csv > example.csv
Miller:条件指定に。
mlr --csv filter '$country == "Germany" && $revenue > 10000' in.csv > out.csv
DuckDB:SQLで書けることなら何でも、どんなサイズのファイルでも。
duckdb -c "COPY (SELECT * FROM 'in.csv' WHERE country = 'Germany' AND revenue > 10000) TO 'out.csv'"
3つとも、ヘッダーを残し、引用符を正しく扱い、条件に合う行だけを書き出します。DuckDBについてはCSVにSQLを実行するガイドでさらに詳しく説明しています。
間違った行が出てしまうフィルターの失敗例
どれももっともらしい結果を返すので、それが危ないところです。
- 大文字小文字と空白。
Germany、germany、Germany(末尾に空白)は、ほとんどのフィルターで3つの別の値として扱われます。絞り込む前に、その列の重複を除いた値を確認してください。 - テキストとして保存された数値。 列がテキストだと
revenue > 10000は文字列比較になり、"9000" > "10000"は辞書順では真になります。ツールがその列を数値として認識していることを確かめてください。 - 形式が混在した日付。
03/04/2026は、ある出力では3月、別の出力では4月です。日付列で絞り込むのは、どちらの形式かを確認してからにしてください。 - 空白セル。 空のセルはゼロなのか、不明なのか、該当なしなのか。フィルターは通常、「より小さい」条件から空白を黙って除外します。
スマートフォンの場合
スマートフォンでCSVを表計算ファイルに変換してからフィルターすると、上の問題がすべて起きるうえに画面も小さくなります。フィルター機能を備えたCSVアプリなら、ファイルをそのまま扱えます。
Smart CSV Viewer では、Filter をタップすると表の上にパネルが開きます。列ごとに条件を追加します。演算子は列の型に合わせて切り替わるので、数値の列は数値として、日付の列は日付として比較されます。確定する前に、Apply · 4 rows のようにボタンで残る行数がわかります。手早く絞り込むなら、セルを長押しして Filter by this value を選びます。


Edit as SQL を使うと、条件がクエリに変わり、手で書き換えられます。結果を別の場所へ持ち出すには、行を選択してコピーします。コピーはフィルターに従い、表計算ソフトには本物のセルとして貼り付けられます。AIアシスタントに普通の言葉で行を頼むこともできます。送信されるのは列名だけです。
iPhoneとAndroid向けに作られたCSV用のフィルターパネル。型を考慮した条件、適用前に表示される該当行数、必要ならSQLも使えて、アップロードは一切ありません。
できることmatch any や match none のグループで条件を組み合わせるのはProの機能です。通常のAND条件は無料で使えます。