質問: vbRed End If Next End Sub ### 試したこと EXCELのほうだとVBAで似たようなことができることは分かったのですが、Googleスプレッドシートではなかなか調べても出てきませんでした(T_T) 上記のコードは調べてていて使えそうだったものを載せているだけなのであまり気にしないでください...
回答: GoogleAppsScript で文字に色を付けるメソッドは Range.setFontColor ですが、セル単位での色変更となるため、セル内の一部文字色変更はできません。 そこで、値を入力したタイミングで「入力範囲に指定しているセル」を「入力中のセル」に上書きする、という方法で実現してみました。 私は添付画像のように A1~A3 を入力規則リストに、B列を入力列としてますので、質問者さんの環境に応じて、サンプルコードの頭の方にある const の箇所を書き換えて試してみてください。 !実行環境 ``` function onEdit(event) { const INPUT_SHEET_NAME = "シート1" // 入力シート名 // const INPUT_COLUMN = 2; // 入力セルの列位置 const INPUT_COLUMNS = [2,3]; // 入力セルの列位置(複数列) const INPUT_RANGE = "A1:A3"; // 入力規則にしている範囲 // 処理中のシート、範囲、値を取得 var editSheet = event.source.getActiveSheet(); // Event.range をそのまま上書きしようとすると実行時エラーとなるあるため再取得 var editRange = editSheet.getRange(event.range.getRow(), event.range.getColumn()); var newValue = editRange.getValue(); // onEdit イベントは全シート全セルの編集で起動されるため、 //「シート1」「入力可能列」かつ「入力値あり」の場合のみ後続処理 if ( editSheet.getName() != INPUT_SHEET_NAME ) return; // if ( editRange.getColumn() != INPUT_COLUMN ) return; if ( INPUT_COLUMNS.indexOf(editRange.getColumn()) == -1) return; // 入力可能列の複数に対応 if ( newValue == "") return; // 入力値に対応した一部文字色付きセルで入力セルを上書きする var inputRange = editSheet.getRange(INPUT_RANGE); loop1: for (var row = 1; row <= inputRange.getNumRows(); row++) { for (var col = 1; col <= inputRange.getNumColumns(); col++) { var cell = inputRange.getCell(row, col); // 入力セルを上書きしてループ終了 if (cell.getValue() == newValue) { cell.copyTo(editRange); break loop1; } } } // 上書きにより入力規則が消えてしまうため、入力規則を再作成する var rule = SpreadsheetApp.newDataValidation().requireValueInRange(inputRange).build(); editRange.setDataValidation(rule); } ```