スプレッドシートを作成する際に特定の条件(空白だったら色をつける、この文字の時は太字にするなど)を設定させたい時があります。表示形式から条件付き書式をクリックして毎回設定する方法でもいいのですが毎回作成するような報告書などに同じ設定を手動で行うとミスが発生したり作業時間がかかってしまいますよね。
そこで今回はスクリプトで条件付き書式を設定できるメソッドをご紹介します。
newConditionalFormatRuleメソッド(条件付き書式)
スプレッドシートの条件付き書式を新たに作成するためのメソッドです。
このメソッドに続けて設定条件、設定する内容や設定する範囲を設定することができます。
スプレッドシートの機能作成メソッドは
newConditionalFormatRuleメソッド(条件付き書式)このブログ
newDataValidation()メソッド(入力規則)
newFilterCriteria()メソッド(フィルタ作成)
newRichTextValue() メソッド(リッチテキスト)
newTextStyle()メソッド(テキストスタイル)
などがあります。(各リンクに詳しい説明があるのでご覧ください。)
クラス:SpreadsheetApp
注意:初めてコードを実行する際にアクセス権限の許可を求められますが許可をしてください。アクセス権限についての詳細は以下の記事に詳しく載っています。
無料のGmailアカウントでGASに初回の実行許可を与える方法
構造
SpreadsheetApp.newConditionalFormatRule().トリガー.書式.範囲.build()
こちらが条件付き書式の基本スクリプトです。
newConditionalFormatRule()の後に条件となるトリガー.書式の設定、範囲メソッドをスクリプトで記入をし最後にbuild()でビルダーを構築させます。
*newConditionalFormatRuleではトリガーを入れなかったり範囲を入れなかったりするとエラーが出るので忘れずに設定してください。
スプレッドシート上では表示形式→条件付き書式をクリックすると表示されます。下の画面の右側の設定を今回のメソッドではスクリプトで設定することができます。
書式は複数設定することが出来、範囲も配列として入れられるので複数設定できます。
そして最後に.build()メソッドを使用することでビルダーを構築することが出来ます。
トリガー、書式、範囲のメソッドについては別記事(公開予定)で詳しく説明していますのでそちらをご覧ください。
今回はGoogleリファレンスの例を元に説明します。以下がスクリプトです。
サンプルスクリプト1
function newConditionalFormatRule1(){ var sheet = SpreadsheetApp.getActive().getActiveSheet(); var range = sheet.getRange('A1:B3'); var rule = SpreadsheetApp.newConditionalFormatRule() .whenNumberBetween(1, 10) .setBackground("#FF0000") .setRanges([range]) .build(); var rules = sheet.getConditionalFormatRules(); console.log(rules); rules.push(rule); sheet.setConditionalFormatRules(rules); }
*Googleリファレンスでは6行目がsetBackgroundColorとありますがsetBackgroundを使用してください。
(リファレンスのままだとエラーが出てしまいます。)
先ほどの構造の場所は4行目から8行目までの以下の部分です。
//サンプルスクリプト1 4行目〜8行目 var rule = SpreadsheetApp.newConditionalFormatRule()//条件付き書式を作成するためのメソッド .whenNumberBetween(1, 10) //トリガー:数字が1~10の間の時 .setBackground("#FF0000") //書式:セルの背景色を設定(赤) .setRanges([range]) //範囲:範囲を設定 (3行目のA1:B3が範囲) .build(); //ビルダーを構築
こちらの部分が条件付き書式の作成部分になります。簡単な解説はコメントアウトの部分をご覧ください。
ちなみに改行して見やすくしているだけですので以下のように書いても問題ありません。
(横スクロールできます)
//サンプルスクリプト1 4行目〜8行目を1行にまとめたもの var rule = SpreadsheetApp.newConditionalFormatRule().whenNumberBetween(1, 10).setBackground("#FF0000").setRanges([range]).build();
これで新規ビルダーを作成することができました。これだけではスプレッドシートに設定することができません。まずは条件付き書式の取得をします。9行目の
//サンプルスクリプト1 9行目 var rules = sheet.getConditionalFormatRules()
の部分でこのスプレッドシートの条件付き書式を取得します。この部分は配列で取得できますが今回は最初は何も設定していませんので配列の中は空です。ログを確認してみると
このように配列の中は空っぽです。ですので先ほど作成したruleを配列に追加します。それが
//サンプルスクリプト1 11行目 rules.push(rule);
の部分です。そしてruleを追加したrulesを
//サンプルスクリプト1 12行目 sheet.setConditionalFormatRules(rules);
でスプレッドシートに設定をします。今回のスクリプトを起動することに以下の画像のようにA1:B3の範囲に1〜10の数字を入れるとセル背景が赤くなります。
A4は対象外のため1と入力しても変化はありません。表示形式タブの条件付き書式をクリックすると右のように条件付き書式が設定されているのがわかりますね。
サンプルスクリプト2
もう一つサンプルを作成してみます。
function newConditionalFormatRule2(){ var sheet = SpreadsheetApp.getActive().getActiveSheet(); var range = sheet.getRange('C1:E3'); //C1:E3の範囲 var rule = SpreadsheetApp.newConditionalFormatRule() .whenCellNotEmpty() //空白ではないセルの時 .setBackground("#0000ff") //セル背景を設定(青) .setRanges([range]) .build(); var rules = sheet.getConditionalFormatRules(); console.log(rules); rules.push(rule); sheet.setConditionalFormatRules(rules); }
コメントアウトしてある部分を変更しています。
今回の条件はwhenCellNotEmptyという空白ではないセルの時というメソッドを使用しています。
記入方法としてはサンプルスクリプト1に続いて記入してみてください。
スクリプトを実行してログを確認してみると1で作成した条件付き書式のデータが入っています。
何が書いてあるのかデータの中身は分かりませんが何かのデータが格納されていることが分かりますね。
そしてスプレッドシートを確認してみます。今回はC1:D3まで数値を入れています。
このようにスクリプト1・2で作成した条件付き書式が反映されてることが分かります。
このように複数の書式を追加することができますので様々な条件を一つのスプレッドシートに設定することができますね。
この他の条件付き書式のトリガーや設定メソッドは
Class ConditionalFormatRuleBuilder(公開予定)で詳しく紹介します。
まとめ
今回はスプレッドシートの条件付き書式を作成するためのビルダーであるnewConditionalFormatRuleメソッドを紹介しました。
このメソッドを使用することによって今回のサンプルのように
正しい数値を入れる色がついたり、
間違った数値を入れると色がつく
といったような条件をあらかじめスクリプトで設定をすることができます。
これによっていちいち手動で設定することをせず、作業の効率化やミスの低下も防ぐことができます。
また確認者もどこが間違っているか簡単に確認出来るのでチェックする時間も大幅に短縮することが可能になります。
このメソッドの使い方をしっかり覚えて活用できるといいですね。
ここまでご覧いただきありがとうございました。