LoginSignup
10

More than 5 years have passed since last update.

スプレッドシートのセル背景色に応じて処理を行う

Posted at

環境

2018/1/8時点のGoogleAppsScript

はじめに

スプレッドシートで背景色を塗りつぶしてデータの管理を可視化することがあります。
その背景色に応じて処理を分岐したいケースがあったのでその部分だけを抽出してまとめておきます。
(20色でギリギリ足りたという混沌具合...)

先にまとめ

/**
* 色を特定する
*/
function identifyColor(){
  var sheet = SpreadsheetApp.getActiveSheet();

  // 特定する色を取得する
  var targetColor = sheet.getRange(3, 4).getBackground();

  // 色一覧の「背景色の配列」と「内容の配列」を取得する
  var colorNum = 20;
  var colorsListRange = sheet.getRange(3, 2, colorNum, 1);
  var colorArray = colorsListRange.getBackgrounds();
  var contentArray = colorsListRange.getValues();

  // 色に応じて処理する
  for(var i = 0; i < colorNum; i++){
    var cellColor = colorArray[i][0];
    if(cellColor == targetColor){
      contentArray[i][0] = "コレ!";
    }else{
      contentArray[i][0] = "";
    }
  }

  // シートにセットする
  colorsListRange.setValues(contentArray);
}

パレット.gif
△背景色をコピペすると同色のセルに「コレ!」が表示されます。

解説

値と背景色の情報は別々に取得する

値はおなじみ Range.getValues() で取得します。
あくまでValueを取得するだけで背景色の情報はここには含まれていません。

背景色は Range.getBackgrounds() で別途取得します。
単体セルの背景色:getBackground
複数セルの背景色:getBackgrounds
「#ffffff」のように16進数で取得できるので文字列として比較可能です。

トリガーをセットする

デモンストレーション用に編集時に呼び出されるように設定しています。
トリガー.png

さいごに

異なる20色揃えるのが地味に大変だったので共有しておきます。
https://docs.google.com/spreadsheets/d/1FD93bOPa7_duj899eTCLq7JfApQDbk0EUotp2Dc8Dz0/edit#gid=0
編集はできなくとも背景色のコピーはできるはず...

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10