こんにちは!
Yuki (@yukibnb) です。
今回はGoogle Apps Script(GAS)を使ってスプレッドシートのセルの背景色(塗りつぶしの色)を変更する方法を紹介します。
セルの背景色(塗りつぶしの色)を取得する方法を知りたい方は以下記事をご覧ください。
www.yukibnb.com
では見ていきましょう!
はじめに
今回は上記「売上表」シートを例に使用します。
紹介する方法は2種類です。
- 《setBackground》セルの背景色を文字列を使って変更する
- 《setBackgrounds》セルの背景色を二次元配列を使って変更する
状況に応じてお好きな方法を使用ください。
《setBackground》セルの背景色を文字列を使って変更する
setBackgroundメソッドを使ってセルの背景色を変更することができます。
括弧内の文字列にはカラーコードを記入します。
カラーコードについては以下記事内の解説をご覧ください。
【コピペでOK!GAS基本操作】セルの背景色を取得する方法
おすすめの使用例
本記事の後半で紹介するsetBackgroundsメソッドと比較すると、以下のような時にsetBackgroundメソッドの方がシンプルに記述できて便利です。
- 単一セルの背景色を変更したい時
- 複数セルの背景色を同じ色に変更したい時
- 複数セルの背景色をリセットしたい時
具体的にコードを見てみましょう。
コピペでOK!単一セルの背景色を変更するGAS
GIF動画のようにB4セルだけ緑色(#008000)に変更したい場合、以下のように書きます。
var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名は置き換えてください var sh = ss.getSheetByName("売上表"); //B4セルの背景色を変更する sh.getRange(4,2).setBackground("#008000");
getRange(4,2)
でB4セルを指定し、setBackground("#008000")
でB4セルの背景色を緑色(#008000)に変更しました。
getRange
を使ったセル範囲の取得(指定)方法がよくわからない場合、以下記事を参照ください。
【図解あり!GAS基本操作】スプレッドシートのセル範囲や値を取得する方法まとめ
コピペでOK!複数セルの背景色を同じ色に変更するGAS
GIF動画のようにA1~E4セルまで一括で緑色(#008000)に変更したい場合、以下のように書きます。
var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名は置き換えてください var sh = ss.getSheetByName("売上表"); //A1~E4セルの背景色を同じ色に変更する sh.getRange(1,1,4,5).setBackground("#008000");
getRange(1,1,4,5)
でA1~E4セルを指定し、setBackground("#008000")
でA1~E4セルの背景色を緑色(#008000)に一括変更しました。
単一セルの背景色を変更する時と同じ手順ですね。
コピペでOK!複数セルの背景色をリセットするGAS
GIF動画のようにA1~E4セルの背景色をまとめてリセットしたい場合、以下のように書きます。
var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名は置き換えてください var sh = ss.getSheetByName("売上表"); //A1~E4セルの背景色をリセットする sh.getRange(1,1,4,5).setBackground(null);
背景色をリセットしたい場合、setBackground()
の括弧内にカラーコードの代わりにnullを記入します。
getRange(1,1,4,5)
でA1~E4セルを指定し、setBackground(null)
でA1~E4セルの背景色をリセットしました。
《setBackgrounds》セルの背景色を二次元配列を使って変更する
setBackgroundsメソッドを使ってセルの背景色を変更することができます。
括弧内の二次元配列の要素にはカラーコードを記入します。
おすすめの使用例
setBackgroundメソッドと比較すると、以下のような時にsetBackgroundsメソッドの方が柔軟かつ高速に背景色を変更できます。
- 複数セルの背景色をセルごとに異なる色に変更する
- 【応用】他のメソッドと組み合わせて条件に合致するセルの背景色を変更する
コピペでOK!複数セルの背景色をセルごとに異なる色に変更するGAS
GIF動画のようにA1~E1セルを#434343に、A2~E2セルを#ffff00に、A3~E3セルを#ffffffに、A4~E4セルを#ff9900にそれぞれ背景色を変更したい場合、以下のように書きます。
var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名は置き換えてください var sh = ss.getSheetByName("売上表"); //二次元配列colorを宣言する //colorの要素はカラーコードです var color = [["#434343", "#434343", "#434343", "#434343", "#434343"], ["#ffff00", "#ffff00", "#ffff00", "#ffff00", "#ffff00"], ["#ffffff", "#ffffff", "#ffffff", "#ffffff", "#ffffff"], ["#ff9900", "#ff9900", "#ff9900", "#ff9900", "#ff9900"]]; //複数セルの背景色をセルごとに異なる色に変更する //※setBackgroundsに二次元配列colorを渡しています sh.getRange(1,1,4,5).setBackgrounds(color);
setBackgrounds()
の括弧内に直接二次元配列を記入してもきちんと動作しますが見にくくなります。
そのためまず二次元配列colorを宣言し、setBackgrounds()
に二次元配列colorを渡しました。
もし二次元配列そのものがわかりにくい場合、以下記事で図入りで二次元配列をやさしく解説していますので、よければご覧ください。
・【超初心者向け】二次元配列をやさしく図入り解説
・【初心者向けGAS】一次元配列の要素を追加・削除する方法をやさしく解説
・【初心者向けGAS】二次元配列の要素を追加・削除する方法をやさしく解説
・【初心者向けGAS】二次元配列のループの処理順序を徹底解説
注意!セル範囲と二次元配列の関係
setBackgroundsを使用する上で注意点があります。
「getRangeで指定したセル範囲」と「setBackgrounds()に渡す二次元配列」が同じ範囲(同じ要素数)でなければいけません。
上記画像内ではどちらも「縦4 x 横5」のため、A1~E4セルを変更することができました。
もし「getRangeで指定したセル範囲」と「setBackgrounds()に渡す二次元配列」が異なる範囲(異なる要素数)だと、エラーが発生し背景色は一切変わりません。
はみ出した範囲や足りない範囲だけ無視されることはなく、どのセルの背景色も変わりませんのでご注意ください。
様々な応用方法
setBackgroundsメソッドと他のメソッド(getValuesなど)を組み合わせることで、「条件に合致するセルの背景色を変更する」という処理を高速で行うことができます。
-
【一例】
- 単価が5,000円以上の商品名セルの背景色をオレンジ色にする
- 販売個数が10以下の商品名セルの背景色を赤色にする
- 締切が本日の行の背景色を黄色にする
具体的な使用例やGASのコードなどは応用編として次回以降にご紹介します。
同じようなことはGASを使わずに条件付き書式で行うこともできます
まとめ
今回はGoogle Apps Script(GAS)を使ってスプレッドシートのセルの背景色(塗りつぶしの色)を変更する方法を紹介しました。
次回記事もご期待ください!