PR

【GAS】スプレッドシートで特定の文字だけ一部文字色を変える方法

【GAS】Google スプレッドシートで特定の文字だけ一部文字色を変える方法 GAS
記事内に広告が含まれています。

Google スプレッドシートで作業をしていると、特定の文字だけ色を変えたいケースがあります。

今回は、Google Apps Script (GAS)を使って、指定範囲内のセルの特定の文字だけ一部文字色を変更する方法をご紹介します。

GASを使った文字色の一部変更の手順

Google Apps Script (GAS)を使用してスクリプトを書いていくので、まずはGoogleスプレッドシートからスクリプトエディタを開いて用意していきます。

スプレッドシートにスクリプトエディタを追加する方法

1.Google スプレッドシートを開く

まずは、Google スプレッドシートを開きます。

Google Chromeを開いて右上に表示されるGoogle アプリのアイコンを左クリックします。

そして、Google アプリ一覧から「スプレッドシート」を選択します。


下の画像のような画面に遷移するので、編集したいスプレッドシートを選択して開きます。

2.スクリプトを開く

メニューバーの「拡張機能」を左クリックし、「Apps Script」を選択します。

「Apps Script」を選択すると、スクリプトエディタが新しいタブで開きます。

「Apps Script」を左クリックする
GASエディタ

GASスクリプトの作成方法

特定の文字だけ文字色を変更するスクリプトを作成します。

このスクリプトを使えば、指定した範囲内のセルで、特定の文字列だけ文字色を自動で変更することができます。


Google スプレッドシートで複数セルの文字色を一括で自動変更する方法を知りたい方は、こちらもご覧ください。

1.スクリプトを作成する

まず、新しいタブでスクリプトエディタが開かれたら、以下のスクリプトをコピーして貼り付け、プロジェクトを保存します。

function changePartialTextColor() {
  // アクティブなスプレッドシートとシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 対象範囲を指定(A2:D11)
  var range = sheet.getRange("A2:D11");
  // 指定範囲の値を2次元配列として取得
  var values = range.getValues();

  // 色を変えたい文字列を指定
  var keyword = "緊急";
  // 変更後の色を指定(ここでは赤色)
  var color = "#FF0000";

  // 各セルに対してループ処理
  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      // セルの値を文字列に変換
      var cellValue = values[i][j].toString();
      // 指定した文字列の位置を検索
      var index = cellValue.indexOf(keyword);
      
      // 指定した文字列が見つかった場合
      if (index !== -1) {
        // リッチテキスト値を作成し、文字色を設定
        var richTextValue = SpreadsheetApp.newRichTextValue()
          .setText(cellValue)
          .setTextStyle(index, index + keyword.length, SpreadsheetApp.newTextStyle().setForegroundColor(color).build())
          .build();
        
        // 変更したリッチテキスト値をセルに適用
        sheet.getRange(i + range.getRow(), j + range.getColumn()).setRichTextValue(richTextValue);
      }
    }
  }
}

スクリプトでは、下記の流れで該当する文字の色を変更しています。

1. アクティブシートの取得

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
では、現在アクティブなスプレッドシートを取得し、sheet変数に格納しています。

これにより、スクリプトが操作するシートを指定しています。

2. データの取得

var range = sheet.getRange("A2:D11");
では、指定した範囲(A2:D11)のセルを取得します。

var values = range.getValues();
では、指定した範囲の値を2次元配列として取得します。

指定する範囲は必要に応じて変更してください。

3. キーワードの設定

var keyword = "緊急";
では、検索するキーワードを定義しています。

var color = "#FF0000";
では、変更後の色をHEXコードで指定しています。


このスクリプトでは「緊急」という文字列を「赤色」に変更するように指定しています。これらは、必要に応じて変更してください。

4. データの処理

for (var i = 0; i < values.length; i++) { 
for (var j = 0; j < values[i].length; j++) {
では二重ループで、各セルに対して処理を行います。

5. キーワードの検索

var cellValue = values[i][j].toString(); 
では、セルの値を文字列に変換します。

var index = cellValue.indexOf(keyword);
では、セル内で指定した文字列を検索します。

indexOf()メソッドは、文字列内でキーワードが見つからない場合に-1を返します。

6. キーワードに新しい文字色を設定

if (index !== -1) {
の条件分岐では、指定した文字列が見つかった場合の処理を行います。

SpreadsheetApp.newRichTextValue()
で、新しいリッチテキスト値を作成し、

.setText(cellValue)
で、リッチテキスト値にセルの元の文字列を設定し、

.setTextStyle()
で、指定した文字列の部分に新しい文字色を設定します。

SpreadsheetApp.newTextStyle().setForegroundColor(color).build()
では、新しいテキストスタイルを作成し、文字色を設定します。

7. リッチテキストを適用

sheet.getRange().setRichTextValue()
で、変更されたリッチテキスト値をセルに適用します。

これにより、指定された範囲内のセルを調べ、特定の文字列(”緊急”)を見つけけた場合はその部分の文字色を赤色に変更することができます。

2.スクリプトを実行する

スクリプトエディターのメニューバーで「changePartialTextColor」が選択されていることを確認し、「実行」ボタンを左クリックします。

GASの「実行」ボタンをクリックする手順

初めて実行する際には、スクリプトに対する権限の承認が求められる場合がありますので、承認してください。

「このアプリは Google で確認されていません」と表示された場合は左下の詳細をクリックすると、「無題のプロジェクト(安全ではないページ)に移動」というリンクが表示されます。
このリンクをクリックすると次のページへ遷移できます。

3.実行結果を確認する

スクリプトが正常に実行されると、特定の文字列の文字色が変更されます。

サンプルでは、セルD3、D7、D9の “緊急” という文字の色が赤色に変更されます。

文字色変更の実行結果

応用編:GASでの複数のキーワードに基づいた文字色変更

前項では、指定した範囲内のセルで、特定の文字列だけ色を変更するスクリプトを紹介しました。

本項では、前項の応用として、複数の特定のキーワード(「重要」、「注意」、「緊急」)に基づいて文字色を変更するスクリプトを紹介します。

GASスクリプトの作成方法

複数の文字の文字色を変更するスクリプトを作成します。

1.スクリプトを作成する

まず、スクリプトエディタを開き、以下のスクリプトをコピーして貼り付け、プロジェクトを保存します。

function changeColorForKeywords() {
  // アクティブなスプレッドシートとシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 対象範囲を指定(A2:D11)
  var range = sheet.getRange("A2:D11");

  // 指定範囲の値を2次元配列として取得
  var values = range.getValues();
  
  // キーワードと対応する色を定義
  var keywords = {
    "重要": "#0000FF", // 青色
    "注意": "#FFA500", // オレンジ色
    "緊急": "#FF0000"  // 赤色
  };

  // 各セルに対してループ処理
  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      // セルの値を文字列に変換
      var cellValue = values[i][j].toString();
      // リッチテキスト値を作成
      var richTextValue = SpreadsheetApp.newRichTextValue().setText(cellValue);
      var changed = false;

      // 各キーワードに対してループ処理
      for (var keyword in keywords) {
        // キーワードの位置を検索
        var index = cellValue.indexOf(keyword);
        // キーワードが見つかる限り繰り返し
        while (index !== -1) {
          // キーワードの文字色を設定
          richTextValue.setTextStyle(index, index + keyword.length, 
            SpreadsheetApp.newTextStyle().setForegroundColor(keywords[keyword]).build());
          // 次のキーワードを検索
          index = cellValue.indexOf(keyword, index + 1);
          changed = true;
        }
      }

      // 変更があった場合のみセルを更新
      if (changed) {
        sheet.getRange(i + range.getRow(), j + range.getColumn()).setRichTextValue(richTextValue.build());
      }
    }
  }
}

スクリプトでは、下記の流れで該当する文字の色を変更しています。

1. アクティブシートの取得

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
では、現在アクティブなスプレッドシートを取得し、sheet変数に格納しています。

これにより、スクリプトが操作するシートを指定しています。

2. データの取得

var range = sheet.getRange("A2:D11");
では、指定した範囲(A2:D11)のセルを取得します。

var values = range.getValues();
では、指定した範囲の値を2次元配列として取得します。

指定する範囲は必要に応じて変更してください。

3. キーワードの設定

var keywords = {
"重要": "#0000FF", // 青色
"注意": "#FFA500", // オレンジ色
"緊急": "#FF0000" // 赤色
};

では、検索するキーワードをとそれに対応する色のHEXコードを定義します。

これらの「キーワード」と「HEXコード」は、必要に応じて変更してください。

4. データの処理

for (var i = 0; i < values.length; i++) { 
for (var j = 0; j < values[i].length; j++) {
では二重ループで、各セルに対して処理を行います。

5. セルの値を文字列に変換

var cellValue = values[i][j].toString(); 
では、セルの値を文字列に変換します。

6. リッチテキスト値を作成

var richTextValue = SpreadsheetApp.newRichTextValue().setText(cellValue);
では、リッチテキスト値を作成し、セルの値を設定します。

7. forループ

for (var keyword in keywords) {
では、forループで各キーワードに対して処理を行います。

まず、var index = cellValue.indexOf(keyword);
で、キーワードの位置を検索します。

indexOf()メソッドは、文字列内でキーワードが見つからない場合に-1を返します。

8. キーワードに新しい文字色を設定

while (index !== -1) {
では、指定した文字列が見つかる限り処理を繰り返します。

richTextValue.setTextStyle()
で、見つかったキーワードに対して文字色を設定します。

SpreadsheetApp.newTextStyle().setForegroundColor(keywords[keyword]).build()
では、新しいテキストスタイルを作成し、各キーワードごとの文字色を設定します。

9. リッチテキストを適用

if (changed)
で、リッチテキスト値に変更があるかどうかをチェックし、

sheet.getRange().setRichTextValue()
で、変更されたリッチテキスト値をセルに適用します。

これにより、指定された範囲内のセルを調べ、特定の文字列(”重要”、”注意”、”緊急”)を見つけけた場合はその部分の文字色をそれぞれ指定の色に変更することができます。

また、このスクリプトでは、複数のキーワードが一つのセルに記載されている場合でも、それぞれ指定の文字色に変更することができます。

2.スクリプトを実行する

スクリプトエディターのメニューバーで「changeColorForKeywords」が選択されていることを確認し、「実行」ボタンを左クリックします。

GASの「実行」ボタンをクリックする手順

3.実行結果を確認する

まとめ

このスクリプトを使えば、大量のデータがあるスプレッドシートでも、効率的に特定の文字だけ色を変更できます。

文字の色を一括で変更すると、重要な情報を視覚的に強調したり、データの傾向や特徴を素早く把握できたりと、見やすく分かりやすいスプレッドシートにすることができます。

ぜひ、ご自身のGoogle スプレッドシートでも試してみてください!

コメント

タイトルとURLをコピーしました