スプレッドシートのフィルターで色付きのセルを抽出し、SUBTOTAL関数で色付きのセルの個数をカウントする方法を解説します。色付きのセルの数値を合計する方法や、GAS(Google Apps Script)で指定のセルと同じ色をカウントする方法もご紹介しているので、ぜひ参考にしてみてください。
色付きセルをカウントする方法
SUBTOTAL関数は 1 つまたは複数の範囲を、指定した集計コードに従って集計します。
COUNTA関数に該当するコードは 3 または 103 です。3 は非表示の行を含むセルの個数を、103 は非表示の行を含まないセルの個数を返します。
例えば SUBTOTAL(3,C2:C8) なら、返り値は範囲内の空白でないセルの個数 7 です。
SUBTOTAL関数の構成要素:(集計コード,範囲 1,[範囲 2],…)
表などの範囲を選択し、[データ]タブから[フィルタを作成]をクリックします。
絞り込みアイコンを開き、[色でフィルタ]から[塗りつぶしの色]をクリックします。
絞り込む色を選択すると、フィルタ範囲が色つきのセルに絞込みされました。SUBTOTAL関数の集計結果を確認すると、表示されているセルの個数 3 になっています。
フィルタで除外された行は結果に含まれないので、コードは 3 でも 103 でもOKです。
絞り込みの[色でフィルタ]を[なし]に戻すと、セルの個数は 7 に戻ります。
色つきセルを合計する方法
SUM関数に該当するSUBTOTAL関数の集計コードは、9 または 109 です。9 は非表示の行を含む数値の合計を、103 は非表示の行を含まない数値の合計を返します。
例えば SUBTOTAL(9,C2:C8) なら、返り値は売上の合計 1,420 です。
フィルタ機能で色つきのセルに絞り込むと、自動的に表示されている数値の合計 810 になります。
フィルタで除外された行は、SUBTOTAL関数の集計コードに関わらず結果に含まれません。
GASで色付きセルをカウントする
GASを使って、E2セルと同じ色のセルの個数をカウントする関数を作成します。
E2セルの色を変更した場合、関数を一度消してから入力し直すと結果が更新されます。まず[拡張機能]タブから、[Apps Script]を開いてください。
function countcolor() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('シート1'); const color = sheet.getRange(2,5).getBackground(); const dcolor = sheet.getRange(2,3,7,1).getBackgrounds(); var count = 0; for(var c = 0; c < dcolor[0].length; c++) { for( r= 0; r < dcolor.length; r++) { if(dcolor[r][c] == color) { count++ } } } return count ; }
指定したセルの色をカウントするコードは、上の通りです。
コードを入力できたら[プロジェクトを保存]をクリックし、一度スクリプトを[実行]します。初めて実行する場合は承認が求められるので、[権限を確認]をクリックしてください。
承認の手順:[詳細]→[無題のプロジェクト(安全ではないページ)に移動]→[許可]
functoinに続く英単語部分が、色付きのセルを数えるオリジナルの関数名です。
getSheetByNameには、該当のシート名を入力します。getRangeにはそれぞれカウントする色のセル(今回はE2)と、集計範囲を(行番号,列番号,行数,列数)で指定してください。