条件付き書式を大量のセル範囲に適用するとき、一つひとつ設定するのは手間がかかります。特に数十個のルールを適用する場合、手作業ではミスが発生しやすくなります。この記事では、GoogleスプレッドシートのApps Scriptを使って条件付き書式を一括で設定する方法を解説します。プログラムでルールを制御することで、作業効率が大幅に向上します。
【要点】Apps Scriptで条件付き書式をプログラム的に制御するポイント
- setConditionalFormatRules()メソッド: シートの条件付き書式ルールの配列を一括で設定します。既存のルールを上書きするため、注意が必要です。
- newConditionalFormatRule()ビルダー: 条件式や書式スタイルを柔軟に定義できます。whenTextContains()やsetBackground()などのメソッドを連鎖させます。
- clearConditionalFormatRules()でのクリア: 既存ルールを削除してから新規ルールを追加することで、意図しない重複を防げます。
ADVERTISEMENT
目次
Apps Scriptで条件付き書式を操作する基本
条件付き書式ルールは、スプレッドシートの各シートに配列として保存されています。Apps Scriptでは、getConditionalFormatRules()で現在のルール一覧を取得し、setConditionalFormatRules()で新しいルールの配列に置き換えます。ルール一つひとつはConditionalFormatRuleBuilderクラスを使って作成します。このビルダーは、条件(いつ書式を適用するか)と書式スタイル(背景色や文字色など)を設定し、最後にbuild()メソッドでルールオブジェクトを生成します。スクリプト実行時には、スプレッドシートの承認が必要となる場合があります。
一括設定の手順
事前準備
- スプレッドシートを開く
条件付き書式を設定するスプレッドシートを開きます。スクリプトから操作するため、そのシートにデータが存在することを確認します。 - スクリプトエディタを起動する
メニューの「拡張機能」から「Apps Script」を選択します。新しいスクリプトプロジェクトが開きます。
コーディング
- 関数を作成する
スクリプトエディタに以下のコードを記述します。関数名は任意ですが、ここでは「setConditionalFormat」とします。function setConditionalFormat() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange('A1:A10'); var rule = SpreadsheetApp.newConditionalFormatRule() .whenNumberGreaterThan(100) .setBackground('red') .setRanges([range]) .build(); var rules = sheet.getConditionalFormatRules(); rules.push(rule); sheet.setConditionalFormatRules(rules); } - コードの解説
getActiveSheet()で現在のシートを取得し、getRange()で対象範囲を指定します。newConditionalFormatRule()でビルダーを作成し、whenNumberGreaterThan(100)で数値が100より大きいセルに絞り込みます。setBackground(‘red’)で背景色を赤に設定し、setRanges()で適用範囲を指定します。build()でルールオブジェクトを生成し、現在のルール配列に追加してからsetConditionalFormatRules()で更新します。
スクリプトの実行と確認
- 関数を実行する
スクリプトエディタの実行ボタン(▷)をクリックします。初回は承認画面が表示されるため、内容を確認して許可します。 - 条件付き書式を確認する
スプレッドシートに戻り、A1:A10のセルに100より大きい数値を入力します。該当セルが赤色になっていれば成功です。
応用:複数ルールの一括設定
- ルール配列を直接作成する
複数のルールをまとめて設定するには、ルールの配列を構築してから一度に設定します。次の例では、数値が50未満のセルを緑色、100以上のセルを赤色にする2つのルールを同時に追加します。function setMultipleRules() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange('A1:A20'); var rule1 = SpreadsheetApp.newConditionalFormatRule() .whenNumberLessThan(50) .setBackground('green') .setRanges([range]) .build(); var rule2 = SpreadsheetApp.newConditionalFormatRule() .whenNumberGreaterThanOrEqualTo(100) .setBackground('red') .setRanges([range]) .build(); sheet.setConditionalFormatRules([rule1, rule2]); }既存のルールをクリアせずに追加したい場合は、一旦getConditionalFormatRules()で取得してからpushします。
- 全シートに一括適用する
すべてのシートに同じ条件付き書式を設定するには、Spreadsheetオブジェクトから各シートをループします。function applyToAllSheets() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheets = ss.getSheets(); sheets.forEach(function(sheet) { var range = sheet.getRange('A:A'); var rule = SpreadsheetApp.newConditionalFormatRule() .whenTextContains('エラー') .setBackground('yellow') .setRanges([range]) .build(); sheet.setConditionalFormatRules([rule]); }); }この例では、各シートのA列で「エラー」を含むセルを黄色にします。
注意点とよくあるトラブル
ルールが上書きされる
setConditionalFormatRules()は、現在のルールを新しい配列で完全に置き換えます。既存のルールを残したい場合は、必ずgetConditionalFormatRules()で取得し、配列に追加した上で設定します。
承認が必要な場合がある
スクリプトを初めて実行するとき、スプレッドシートの変更権限を求めるダイアログが表示されます。承認しないと実行できません。組織のアカウントでは管理者の承認が必要な場合もあります。
シート名を変更すると範囲がずれる
スクリプト内でシート名を直接指定している場合、シート名を変更するとスクリプトが正しく動作しなくなります。シート名を変更するときはスクリプトも更新する必要があります。
ADVERTISEMENT
UI設定との比較
| 項目 | UIでの設定 | Apps Scriptでの設定 |
|---|---|---|
| 設定速度 | ルール1つごとに画面操作が必要で大量設定に時間がかかる | 大量ルールでも一度のスクリプト実行で完了 |
| 再現性 | 手作業のためミスが発生しやすい | コードを共有すれば全く同じルールを再現可能 |
| 条件の自由度 | UIで用意された条件のみ | 数式やカスタム関数を使った複雑な条件が作成可能 |
| 管理の容易さ | UI上で一覧確認できる | コードの変更が必要 |
まとめ
この記事では、Apps Scriptを使って条件付き書式をプログラムで一括設定する方法を解説しました。newConditionalFormatRule()ビルダーとsetConditionalFormatRules()メソッドを組み合わせることで、大量のルールも効率的に管理できます。特に「全シートに同じルールを適用する」「複数の条件を同時に設定する」といった作業で威力を発揮します。次に試す応用としては、セルの値に応じてアイコンセットやカラースケールを設定することも可能です。スクリプトエディタで他のメソッドを調べて、より高度な書式制御に挑戦してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
