GASでスプレッドシートの文字数に応じて色付け|複数シートも一括適用

前回の記事では、条件付き書式を使って文字数に応じたセルの色付けをする方法をご紹介しました。

条件付き書式を使えば、ルールを設定するだけで簡単にセルの色分けができます。

ですが、シートごとに個別設定が必要なため、シート数が多いと手間がかかるというデメリットがあります。

「すべてのシートに一括で色付けしたい!」

そんなときに便利なのが Google Apps Script(GAS)です。

GASを使えば複数のシートや新しく追加されたシートに対しても一括で適用できます。

本記事では、GASを活用してスプレッドシートの文字数に応じたセルの色付けをご紹介します。

目次

完成イメージ

  • GASで全シートのセルに対して、文字数に応じた色分けができる
  • 特定のシートや列、範囲に限定した適用もできる

GASを使うメリットとデメリット

メリットデメリット
すべてのシートに一括適用ができる
より細かいルールを設定できる
スクリプト作成など初回設定が必要
元に戻す操作は条件付き書式と比べてやや不便
メリット
すべてのシートに一括適用ができる

条件付き書式では各シートごとに手動で設定する必要 がありますが、GASを使えば 1つのスクリプトで全シートに適用できます。

新しく追加したシートにも自動で反映されるため、管理の手間が省けます。

より細かいルールを設定できる

GASを使えば、特定のシートや列、範囲のみに適用したり、複雑な条件ルールを設定るするなどのカスタマイズも可能です。


デメリット
スクリプト作成など初回設定が必要

GASを実行するには、まずスクリプトを登録する必要があります。

さらに、定期的な自動実行や編集時の自動適用を行うには、トリガーの設定も必要です。

そのため、初回の設定には時間がかかる 点に注意が必要です。

元に戻す操作は条件付き書式と比べてやや不便

条件付き書式の場合は 書式ルールを削除するだけで色付けを解除できますが、GASで設定した場合は 「色をリセットするスクリプト」の実行が必要です。

(手動の「元に戻す」操作もできますが、時間がかかります。)

そのため、頻繁に変更する場合は条件付き書式の方が便利です。

GASの実行手順

STEP
スプレッドシートを開く

文字数に応じて色分けしたいセルのあるスプレッドシートを開きます。

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
スクリプトの作成

function myFunction(){

}

が最初から入っているため、消去して以下のスクリプトを貼り付けます。

function highlightCellsInAllSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  sheets.forEach(function(sheet) {
    var range = sheet.getDataRange();
    var values = range.getValues();

    for (var i = 0; i < values.length; i++) {
      for (var j = 0; j < values[i].length; j++) {
        var textLength = values[i][j].toString().length;
        var cell = range.getCell(i + 1, j + 1);

        if (textLength >= 100) {
          cell.setBackground("#ff9999"); // 赤色
        } else if (textLength >= 50) {
          cell.setBackground("#ffff99"); // 黄色
        } else {
          cell.setBackground(null); // 色をリセット
        }
      }
    }
  });
}
スクリプトの説明
すべてのシートをリストとして取得
function highlightCellsInAllSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // 現在のスプレッドシートを取得
  var sheets = ss.getSheets(); // すべてのシートを取得
  • getActiveSpreadsheet() で現在開いているスプレッドシートを取得します。
  • getSheets() でスプレッドシート内のすべてのシートを配列として取得します。
各シートごとに処理を実行
  sheets.forEach(function(sheet) {
    var range = sheet.getDataRange(); // データが入力されている範囲を取得
    var values = range.getValues(); // セル内のデータを取得(2次元配列)
  • forEach() を使って取得したすべてのシートに対して処理を繰り返します。
  • getDataRange() でデータが入力されている範囲を取得します。
各セルの文字数を取得して色分けを判断
    for (var i = 0; i < values.length; i++) {
      for (var j = 0; j < values[i].length; j++) {
        var textLength = values[i][j].toString().length; // 文字数を取得
        var cell = range.getCell(i + 1, j + 1); // 対応するセルを取得
  • toString().length を使って文字数を取得します。
  • getCell(i + 1, j + 1) で特定のセルを取得します。(GASは1から始まるので+1)
色の条件分岐(50文字以上:黄色、100文字以上:赤色、それ未満は色なし)
        if (textLength >= 100) {
          cell.setBackground("#ff9999"); // 赤色
        } else if (textLength >= 50) {
          cell.setBackground("#ffff99"); // 黄色
        } else {
          cell.setBackground(null); // 色をリセット
        }
      }
    }
  });
}
  • setBackground("#ff9999")100文字以上は赤色
  • setBackground("#ffff99")50文字以上100文字未満は黄色
  • setBackground(null)50文字未満は色をリセット(元の状態に戻す)
全シートではなく、特定のシートのみ適用するスクリプト
function highlightSpecificSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  
  // 適用したいシート名のリスト
  var targetSheets = ["Sheet1", "Sheet2"];
  
  targetSheets.forEach(function(sheetName) {
    var sheet = ss.getSheetByName(sheetName);
    if (!sheet) return; // シートが存在しない場合はスキップ
    
    var range = sheet.getDataRange();
    var values = range.getValues();

    for (var i = 0; i < values.length; i++) {
      for (var j = 0; j < values[i].length; j++) {
        var textLength = values[i][j].toString().length;
        var cell = range.getCell(i + 1, j + 1);

        if (textLength >= 150) {
          cell.setBackground("#99ccff"); // 青色
        } else if (textLength >= 100) {
          cell.setBackground("#ff9999"); // 赤色
        } else if (textLength >= 50) {
          cell.setBackground("#ffff99"); // 黄色
        } else {
          cell.setBackground(null);
        }
      }
    }
  });
}

特定のシート名に適用させるにはスクリプト5行目のSheet1Sheet2を対象のシート名に変更します。

  // 適用したいシート名のリスト
  var targetSheets = ["Sheet1", "Sheet2"];
STEP
スクリプトを保存

スクリプトを書いたら、好きな名前を付けて保存します。

(例:「文字数_セル色分け」)

STEP
スクリプトを実行

スクリプトを実行します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
完了

ファイル内のすべてのシートに対して、文字数に応じた色分けがされます。

GASの自動化:スプレッドシート編集時に自動適用

トリガーを設定することで、定期的にGASを自動実行できます。

毎日決まった時間帯に実行する場合
STEP
GASエディタを開く
画像に alt 属性が指定されていません。ファイル名: GAS.png

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
トリガーページを開く

時計アイコン」をクリックしてトリガーページを開きます。

STEP
「トリガーを追加」をクリック

トリガーを追加」または「新しいトリガーを作成します」をクリックします。

STEP
トリガーを実行するイベントを設定

(時間主導型を選択した例)

実行する関数を選択
  • トリガーを実行した際に動かす関数を指定します。
実行のデプロイを選択:
  • どのバージョンのスクリプトを使用してトリガーを実行するかを選びます。
  • 通常は「Head」を選択して、最新のバージョンを使用します。
イベントのソースを選択
  • トリガーのきっかけとなるイベントを指定します。
  • 「時間主導型」などの選択肢があります。
  • 時間主導型は、指定されたスケジュールに基づいてスクリプトを実行するものです。
時間ベースのトリガーのタイプを選択
  • 時間主導型のイベントソースを選択した場合に表示され、どの頻度で実行するかを設定します。
  • 日付ベースのタイマー」を選択すると、毎月決まった時間にスケジュールを設定できます。
STEP
トリガーを保存

保存をクリックして、トリガー設定完了となります。

これで毎日決まった時間にスクリプトが実行されます。

設定したトリガーは一覧で表示されます。

参考:編集時のトリガー設定も可能

編集時(onEdit)のトリガーを設定することで、リアルタイムな色付けの適用も可能です。

ただし、現在のスクリプトはすべてのシートに対して実行されるため、シート数が多いと動作が遅くなる可能性があります。

そのため、編集時のトリガーを使用する場合は、変更されたシートのみ対象にするようにスクリプトを一部変更する必要があります。

(例: e.source.getActiveSheet() を使用して、変更があったシートのみに適用)

まとめ

GASを使えば、スプレッドシートのすべてのシートに対して文字数に応じた色分けが適用できます。

条件付き書式よりも細かな設定や、トリガー設定による自動実行が可能です。

一方で、条件付き書式を使う方法は、シンプルな設定で直感的に管理できるメリットがあります。

用途に応じて使い分けることで、より効率的にスプレッドシートを活用できます。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次