見出し画像

実用的。セルの色で集計をかけるプログラム。【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回)

・条件

・範囲の自動化

が出てきます。

今回のプログラムをイメージ化しました

いきなり、全部組み合わされると、何のこっちゃとなります。
次回以降、個別に解説していきたいと思います。




どんな記事ならサポートしてみようと思えるか、ご要望ありましたら教えてくださいね。