![見出し画像](https://assets.st-note.com/production/uploads/images/86375432/rectangle_large_type_2_aefc44505042ef54156473e11ee193cf.png?width=800)
実用的。セルの色で集計をかけるプログラム。【Googleスプレッドシート】【GAS】
プログラムの目的
スプレッドシートでフォーマットに決まってない運用をしているときに、それぞれが目印のためセルに色を付けたりしませんか?そしてあとから、色ごとに集計が必要になったりして。。。sumcolor関数と名付けました。googleさん、なぜ基本関数に組み込んでくれないんでしょうか。
色のついたセルを数えたいのではない。
同じような表現になるのですが、セルの数を数えるのではなく、値の合計を出す関数です。SUMとCOUNTAの違いですね。
色付きのセルの数を数えるだけのほうが、構成が理解しやすいのですが、実用度を上げたくて、こちらの関数を作成してみました。
function sumcolor(a,b) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var color = sheet.getRange(a).getBackgroundColor();
var range = sheet.getRange(b);
var start_row = range.getRow()
var start_Column = range.getColumn()
var end_row = range.getLastRow()
var end_Column = range.getLastColumn()
var sum_all = 0
for(j=1;j<=end_Column-start_Column+1;j++){
var sum = 0
for(i=start_row;i<=end_row;i++){
var color2 = sheet.getRange(i,start_Column+j-1,1,1).getBackgroundColor();
if ( color2 == color ){
sum = sum + Number(sheet.getRange(i,start_Column+j-1,1,1).getValue());//空白時にゼロと認識しない
}
}
sum_all = sum_all + sum
}
return sum_all;
}
getRange、getValue以外にも色々出てきました。
文章も長いです。今の段階ではすべて理解するのはあきらめましょう。
ここから少し読み飛ばして下さい。
まずは、var color = sheet.getRange(a).getBackgroundColor() です。
ただこれはわかりやすい。「セルの色を取得する」です。「#ffffff」こんなやつですね。setBackground(×setBackgroundColor)で、セルの色を変えることができるので、興味があれば触ってみてください。
あれ?( )のなかに「a」「b」がありますね。これは、今の段階では「スクリプトを使い慣れた関数にするためのもの」とでも理解しておいてください。実際、セルには =sumcolor("C10","B2:G8") という風に入力されます。
この場合、"C10"→「a」、"B2:G8"→「b」という風に情報が伝わります。
ここからが本題。
スクリプトを学ぶ上での最初の壁です。
・繰り返し(2回)
・条件
・範囲の自動化
が出てきます。
今回のプログラムをイメージ化しました
![](https://assets.st-note.com/img/1662536374370-5z9nepHNjo.png?width=800)
いきなり、全部組み合わされると、何のこっちゃとなります。
次回以降、個別に解説していきたいと思います。
どんな記事ならサポートしてみようと思えるか、ご要望ありましたら教えてくださいね。