Amazon10/19まで!プライム感謝祭開催中!セール会場へ

Googleスプレッドシート│連続データをグループごとに色で塗り分ける方法

A列の連続した同じ値をグループとして色分けします。

先頭行は見出しとして除き、元シートをコピーしてからコピーのA列だけを変更します。

最終確認は2026年10月2日です。

ローカルの模擬検証を行いましたが、Googleへの認可・実シートへの反映・Driveの実ファイル列挙・Webアプリの配備は未検証です。

目次

練習用の入力と設定

ZIPを展開し、使う記事のarticle-22939.jsだけをApps Scriptへ保存します。

同名の関数を含むため、別の記事のコードを同じプロジェクトへ混ぜないでください。

データ整理の練習コードとHTML例をダウンロード(ZIP)

設定名設定する値
SPREADSHEET_ID新しく作った練習用スプレッドシートのID
SHEET_NAME入力したシートの名前

プロジェクトの設定でスクリプトプロパティを入力します。

まず新規の練習データを使い、要求される認可範囲と操作内容を確認してください。

入力例と実行する関数

A、A、空欄、B、Aを入力し、連続するAは青、空欄は背景なし、Bはベージュ、最後のAは緑の配列になります。

実シートではA1を見出しにし、A2以降へ同じ例を入力してcopyColoredSheetを実行します。

// このコードは記事ごとに別のApps Scriptプロジェクトへ保存します。
function required_(key) {
  const value=PropertiesService.getScriptProperties().getProperty(key);
  if (!value) throw new Error(key+'を設定してください');
  return value;
}
function safeCell_(value) {
  const s=String(value);
  return /^[=+@-]/.test(s) ? "'"+s : s;
}
function escapeHtml_(value) {
  return String(value).replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
}
function https_(value) {
  const s=String(value).trim();
  if (!/^https:\/\/[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?(?::443)?(?:[/?#][^\s<>"'\\]*)?$/i.test(s)) throw new Error('HTTPS URLを確認してください');
  return s;
}
function sourceSheet_() {
  const sheet=SpreadsheetApp.openById(required_('SPREADSHEET_ID')).getSheetByName(required_('SHEET_NAME'));
  if (!sheet) throw new Error('対象シートがありません');
  return sheet;
}
function groupColors_(values) {
  const palette=['#f0f8ff','#f5f5dc','#f0fff0'];
  let previous=null,index=-1;
  return values.map(row=>{
    const v=row[0];
    if(v==='') {previous=null;return [null];}
    const key=v instanceof Date ? 'date:'+v.getTime() : typeof v+':'+String(v);
    if(key!==previous) index++;
    previous=key;return [palette[index%palette.length]];
  });
}
function demoGroups(){return groupColors_([['A'],['A'],[''],['B'],['A']]);}
function copyColoredSheet() {
  const sheet=sourceSheet_(),last=sheet.getLastRow();
  if(last<2) throw new Error('見出し以外にデータがありません');
  if(last>1001) throw new Error('練習対象は1000行以内にしてください');
  const values=sheet.getRange(2,1,last-1,1).getValues(),colors=groupColors_(values);
  const ss=sheet.getParent(),copy=sheet.copyTo(ss);
  copy.setName('色分け練習_'+Utilities.getUuid().replace(/-/g,''));
  copy.getRange(2,1,colors.length,1).setBackgrounds(colors);
  return copy.getName();
}

確認結果と切り分け

条件結果
見出し・同じ値見出しを除外。同じ値が連続する間は同色
空欄・型・日付空欄で区切る。数値1と文字1を区別。同時刻の日付は同グループ
書込先コピーだけを変更。元シートの背景色は変更しない

Node.jsの模擬検証は5記事合計69ケースです。

純粋関数の結果と、模擬のGoogleオブジェクトで対象選択・書込先・失敗時停止を確認した範囲であり、実サービスの成功を示すものではありません。

条件付き書式がコピーに残っていると、直接設定した背景色が見えない場合があります。

まず条件付き書式のない練習表で試し、既存の規則を変更する前に内容を確認します。

この例はA列だけを色分けし、行全体の着色は行いません。

コピーは数式や参照も含むため、独立した値だけの練習表から始めてください。

停止と戻し方

この例は定期トリガーを作成しません。

既存トリガーから呼ぶ変更を加える場合は、まず手動の1回を確認し、停止時にはそのトリガーを止めます。

元シートはそのまま残ります。

失敗したコピーや着色結果を完成扱いにせず、戻す際は元シートを参照してください。

コピーを取り除く操作はコードに含めていません。

公式資料

Driveフォルダの取得と列挙、シート範囲への反映、HTMLへの出力とエスケープ、Apps Scriptの利用上限を参照してください。

関連記事・旧実装の参考資料

従来のコードや外部の参考例は、本稿の練習ZIPと内容が異なる場合があります。

今回のコードは記事ごとに別のプロジェクトへ保存してください。

よくある質問:GASで連続データを色分けするときのチェックリスト

このスクリプトは、何をしますか?

A列の連続した同じ値をグループとして、色分けします。先頭行は見出しとして除き、元シートをコピーしてから、コピーのA列だけを変更します。

どんな色になりますか?

記事の例では、A、A、空欄、B、Aを入力すると、連続するAは青、空欄は背景なし、Bはベージュ、最後のAは緑になります。

空欄や、数値と文字は、どう扱われますか?

空欄・型・日付で区切ります。数値の1と、文字の1は区別します。同時刻の日付は、同グループとして扱います。

元のシートは、変わりますか?

変わりません。書き込み先は、コピーだけを変更します。元シートの背景色は変更しません。

色が見えないときは、どうしますか?

条件付き書式がコピーに残っていると、直接設定した背景色が見えない場合があります。まず条件付き書式のない練習表で試し、既存の規則を変更する前に、内容を確認します。

行全体も、色分けされますか?

されません。この例は、A列だけを色分けし、行全体の着色は行いません。

この記事のコードは、動作確認済みですか?

ローカルの模擬検証を行いましたが、Googleへの認可・実シートへの反映・Driveの実ファイル列挙・Webアプリの配備は、未検証です。最初は、新規の練習データで試してください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

スプレッドシート・GASのおすすめ書籍

作業環境の作り方

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