【GAS/スプレッドシート】色付きセルの数を数える

GAS

※本サイトはアフィリエイト広告を利用しています。

ココナラで依頼のあったお客様
「背景色がついているセルの数をカウントするコードを書いたけど動きません。解決方法を教えてください」
というご依頼でした。

早速作成済みのコードを送っていただいたところ、どうやらサイトからコピペしただけで中身をわかっていらっしゃらないようでした。あらら。。。
こちらのサイトを参照したよう。

[GAS][スプレッドシート]指定した背景色のセルの合計を計算する - Qiita
参考にしたソースしゃのんあどべんとかれんだー 2日目 (忘年会幹事のちょっとしたお悩みをちょっと解決してくれるかもしれない GAS)スクリプトエディタを開くスクリプトを書く// 指定範囲のセ…

こうやってコードをアップしてくれてる先人達に感謝しつつ、コピペしたコードを動かしながら理解する努力も必要だなと思った1日でした。

サンプルコード

で、お客様が送ってきたコードを元に最終的に作ったのがこちらになります。

// 指定範囲のセル背景色に合致するセルの合計数を返します
// color: 背景色    rangeSpecification: 範囲指定文字列
function countCellsWithBackgroundColor(color, rangeSpecification) {
 
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName("シート1");
 var range = sheet.getRange(rangeSpecification);
 
 var x = 0; //セルのカウント用
 var i = 0;
 var j = 0;
 var cell;
 for (i = 1; i <= range.getNumRows(); i++) {  //getNumRows():Rangeの行数を取得
   for (j = 1; j <= range.getNumColumns(); j++) {
     cell = range.getCell(i, j);
     if(cell.getBackgroundColor() == color)
       x++;
   } 
 }
 return x;
}

// 指定セルの背景色を取得します
function getColor(rangeSpecification) {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName("シート1");

 return sheet.getRange(rangeSpecification).getBackgroundColor();
}


function setCell(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName("シート1");
 
 //3行目から13行目までループ
 for (k = 3; k <= 13; k++){
   //"H3:N3"のような範囲を作成
   var range = sheet.getRange(k,2,1,10)
   //関数を作成
   var tmp = '=countCellsWithBackgroundColor(getColor("A1"),"'+ range.getA1Notation() + '")'
   //関数をセルにセット
   sheet.getRange(k,12).setFormula(tmp);
 }
}


function deleteCell(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName("シート1");

 //3行目から13行目までループ
 for (k = 3; k <= 13; k++){
   sheet.getRange(k,12).setValue('');
 }
}

今回実現したいこと

・色付きのセルの数を数える
・どこかのセルを編集したら、自動で数え直しが実行される
の2点を叶えるものを作ってほしいとのご依頼でございました。

初期設定

サンプルコードをコピペして実行をする前に、初期設定として
・function setCell()
・function deleteCell()
の2つをトリガーにセットして、編集時にこの2つが動くようにしておいてください(詳細を知りたい方は動画の解説を見ていただくとわかりやすいと思います)

解説

ざっくりとした流れを説明すると、
どこかのセルを変更する→setCellが実行される→L列に関数が入力される→入力された関数(countCellsWithBackgroundColor)が実行される
という感じです。

文字では解説しづらいので、今回は全部動画で解説します。
コードの中身の解説はこちらの動画をご参照ください。

色の付いたセルの数をカウントする方法

トリガーの設定の仕方については下記の動画で解説しています。

【GAS】トリガーの設定の仕方

この記事がどなたかのお役に立てれば嬉しいです!

※トリガーの設定の仕方の動画が見れないです、とご連絡くださった方、どうもありがとうございました!
メールでお返事したのですが届かなかったようなのでこの場を借りてお礼申し上げます。

お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば50,000円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば10,000円ほどから承ります。

GAS
スポンサーリンク
スポンサーリンク
りこをフォローする
エクセルVBAの寺子屋

コメント

  1. Yura より:

    はじめまして。自分はVBAの入門書を読む程度の初心者です。

    サンプルコードに加えてYoutubeでの解説動画まで、とても参考になりました。動画では仕組みを解説していただき、自分の作りたいシートに編集することもできました。ありがとうございました!

    今回は趣味の管理シート用にこちらの記事を読ませていただいたのですが、他のVBAのページは職場での作業でも参考になるような記事ばかりでした。また伺わせていただきたいと思います。

    • りこ riko6v6 より:

      コメントどうもありがとうございます!お役に立てたようでとても嬉しいです。
      ブログを書く励みになります。本当にコメントありがとうございました!

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