フィルタ機能で必要な行だけを表示しながら、条件付き書式でデータを視覚化したい場面は多いです。しかし、通常の条件付き書式は非表示の行にも適用されてしまい、見えているデータだけを評価できません。この記事では、SUBTOTAL関数を使ったカスタム数式で、表示されている行だけに条件付き書式を適用する方法を解説します。フィルタと条件付き書式を共存させる実践的なテクニックです。
【要点】条件付き書式で表示行のみを評価する方法
- カスタム数式でSUBTOTAL関数を使用: 条件付き書式のルールに「=SUBTOTAL(103, $A2)=1」のような数式を設定し、可視行のみに書式を適用します。
- 第1引数103は可視セルのカウント: SUBTOTAL関数の第1引数103は、非表示行を除外したCOUNTA計算を意味します。この値が1になる行だけが表示行と判定されます。
- フィルタ切り替えで自動更新: フィルタ条件を変えるたびに条件付き書式が再評価され、現在の表示行だけに書式が動的に反映されます。
ADVERTISEMENT
フィルタと条件付き書式の併用で起きる問題
条件付き書式は、シート上のすべてのセルに対してルールを評価します。フィルタで行を非表示にしても、その行のセルは書式ルールの対象から外れません。その結果、非表示の行にも色が付いたままになり、見た目と実際のデータが一致しないという混乱が生じます。この問題は、フィルタでデータを絞り込むたびに条件付き書式が正しく動作しない原因となります。
解決策として、SUBTOTAL関数を使って「その行がフィルタで表示されているかどうか」を判定する方法があります。SUBTOTAL関数は、可視セルだけを対象に計算を行えるため、条件付き書式のカスタム数式と組み合わせることで、表示行のみに書式を適用できます。SUBTOTAL関数の第1引数には、集計方法を指定するコードを入力します。103は「非表示行を無視したCOUNTA」を意味します。この関数を各行の識別列に適用し、結果が1(可視)かどうかを条件にすることで、フィルタで表示されている行だけを特定できます。
表示行だけに条件付き書式を適用する手順
手順1: 適用範囲を選択する
- 範囲を選択します
条件付き書式を適用したいセル範囲(例:A2:C100)をドラッグして選択します。見出し行を含めるかどうかは状況に応じて決めてください。通常はデータが始まる行から選択します。 - 条件付き書式ルールを開きます
メニューから「書式」→「条件付き書式」をクリックします。右側に条件付き書式ルールのパネルが表示されます。このパネルで新しいルールを作成します。
手順2: カスタム数式を設定する
- ルールの種類を「カスタム数式」に変更します
条件付き書式ルールパネルで、「セルの書式設定条件」のドロップダウンを「カスタム数式」に切り替えます。これにより、任意の数式で条件を指定できるようになります。 - 数式を入力します
数式欄に「=SUBTOTAL(103, $A2)=1」と入力します。ここで$A2は各行の識別列(通常は先頭列)のセルを指定します。範囲がA2:C100の場合、A列を基準にします。列の絶対参照($A)と行の相対参照(2)を組み合わせることで、各行に対して正しく評価されます。例えば、売上データであればA列に商品名が入っていると想定します。 - 書式スタイルを設定します
「書式スタイル」で、表示行に適用したい塗りつぶし色や文字色を選択します。例えば、背景色を薄い黄色に設定します。フォントの色や太字なども必要に応じて指定してください。 - ルールを保存します
「完了」ボタンをクリックしてルールを保存します。これで、フィルタで表示されている行だけに書式が適用されます。もし複数の条件を組み合わせたい場合は、さらにルールを追加することもできます。
手順3: フィルタを有効にして動作を確認する
- フィルタを追加します
データ範囲にフィルタを設定します。メニューから「データ」→「フィルタを作成」をクリックします。または、ツールバーのフィルタアイコンをクリックしても同じです。 - フィルタ条件を変更して確認します
任意の列でフィルタ条件を変更すると、非表示行の色が消え、表示行だけに色が付くことを確認してください。フィルタを解除するとすべての行に色が戻ります。これが正常な動作です。
応用: 複数の条件を組み合わせる
- 数式にAND条件を追加する
例えば、表示行かつ特定の値を持つ行だけに書式を適用したい場合、数式を「=AND(SUBTOTAL(103, $A2)=1, $B2=”完了”)」のようにします。これにより、フィルタで表示されている行の中で、B列が「完了」の行だけが色付けされます。 - OR条件で複数の値を評価する
「=AND(SUBTOTAL(103, $A2)=1, OR($B2=”高”, $B2=”中”))」のようにORを組み合わせれば、表示行の中でB列が「高」または「中」の行をハイライトできます。 - 数値条件との組み合わせ
売上データで、表示行かつ売上が100以上の場合に色を付けるには、「=AND(SUBTOTAL(103, $A2)=1, $B2>=100)」とします。これでフィルタで絞り込んだ高売上商品だけを視覚化できます。
条件付き書式とフィルタ併用時の注意点
SUBTOTALの第1引数103の意味を理解する
SUBTOTAL関数の第1引数には、集計方法を示すコードを指定します。103は「非表示行を無視したCOUNTA」です。これにより、可視セルだけがカウントされます。条件付き書式で「=SUBTOTAL(103, $A2)=1」とすると、各行のA列セルが可視であれば1(可視行)、非表示なら0(またはエラー)となり、可視行だけに書式が適用されます。他のコード(101: AVERAGE, 102: COUNT, 104: MAXなど)も使えますが、表示行判定には103が最も適しています。
適用範囲と基準列の設定ミスに注意
カスタム数式の基準となるセル(例:$A2)は、条件付き書式の適用範囲の先頭行に対応する必要があります。範囲がA2:C100の場合、数式は$A2を基準にします。$A2のように列を絶対参照、行を相対参照にすることで、各行に対して正しく評価されます。範囲の先頭行が2行目でない場合は、それに合わせて調整してください。例えば、範囲がB5:D50なら、数式は「=SUBTOTAL(103, $B5)=1」とします。
フィルタ解除後に書式が残る問題
SUBTOTALを使った条件付き書式は、フィルタが有効でないときはすべての行が可視行と判定されるため、全行に書式が適用されます。これは正常な動作ですが、フィルタ解除時に書式を消したい場合は、別の条件(例:フィルタが有効かどうか)を追加する必要があります。ただし、実用上は問題になることは少ないです。フィルタを解除した後も色が付いていて気になる場合は、手動で書式をクリアするか、別のルールで上書きしてください。
パフォーマンスへの影響
SUBTOTAL関数は大量のデータに対して使用すると計算が重くなる可能性があります。数千行以上のデータでは、条件付き書式の再計算に時間がかかる場合があります。その場合は、データ範囲を必要最小限に絞るか、スクリプトによる代替を検討してください。また、フィルタを頻繁に変更する場合は、計算が遅くならないよう注意が必要です。
空白セルがある場合の挙動
基準列(例:A列)に空白セルがある場合、SUBTOTAL(103, 空白)は0を返します。そのため、空白行は常に非表示行と判定され、条件付き書式が適用されません。これにより、データのない行に誤って色が付くのを防げます。ただし、意図的に空白セルをデータとして扱いたい場合は、他の列を基準にするか、IF関数で空白を処理する必要があります。
ADVERTISEMENT
表示行のみに書式を適用する方法の比較
| 方法 | 特徴 | 手軽さ | 動的更新 |
|---|---|---|---|
| SUBTOTALを使う | カスタム数式1つで実現可能。関数の理解が必要だが、設定は簡単 | 簡単 | フィルタ変更時に自動更新 |
| フィルタビューと条件付き書式の個別設定 | フィルタビューごとに別々の書式ルールが必要。管理が煩雑になりやすい | やや手間 | フィルタビュー切り替え時に更新 |
| Google Apps Script | 完全に制御可能だがコードが必要。動的な更新にはonEditトリガーなどが必須 | 難しい | スクリプト実行時のみ更新(トリガー設定で自動化可能) |
上記の比較から、手軽さと動的更新のバランスに優れたSUBTOTAL関数を使う方法が最も実用的です。フィルタビューを使う方法は、ビューごとに異なる書式を設定したい場合に有効です。スクリプトは高度なカスタマイズが必要な場合に検討してください。
この記事では、条件付き書式とフィルタを併用する際に、表示されている行だけに書式を適用する方法を解説しました。SUBTOTAL関数を使ったカスタム数式「=SUBTOTAL(103, $A2)=1」を設定することで、フィルタ条件の変更に応じて動的に書式が切り替わります。このテクニックを応用すれば、AND条件で複数の評価を組み合わせたり、他の列の値と連動させることも可能です。ぜひ実際のデータ分析で活用し、スプレッドシートの操作効率を高めてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
