Googleスプレッドシートの行の最小セルの色を自動的に変更する方法を探しています。したがって、次のようなテーブルの場合:
1 | 2 | 3
4 | 2 | 1
2 | 1 | 6
1
が含まれるすべてのセルに色を付けます。
ドロップダウンメニューで、フォーマット->条件付きフォーマット...
次に、ルールと色を設定します。複数のセルを選択して、これも実行できます。
編集:
これが、カラーリングでできることの範囲です。セルの最小値を見つけるための複雑な数式を見つけて、セル内にあるものと一致する場合は色付けすることができますが、これが重要な場合は、Googleドキュメントの代わりにExcelを使用することができます。
トリックは、onEditイベントトリガーをタップしてインテリジェンスを追加することです
一見、条件付き書式設定は機能すると思いましたが、行ごとの最小値は標準の条件付き書式設定には少し複雑すぎます。理解するのは少し難しいですが、実行できます。
完全なスクリプトは次のとおりです(テスト済みで動作中):
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
var r = s.getActiveRange();
var row = r.getRow();
var cols = s.getDataRange().getNumColumns();
// crate a range for the row using getRange(row, column, numRows, numColumns)
var rowRange = s.getRange(row, 1, 1, cols);
var rowValues = rowRange.getValues();
// check all the values in the row
var val = 999;
for(var i = 0; i < cols; i++) {
if(val > rowValues[0][i] && rowValues[0][i] !== "") {
val = rowValues[0][i];
}
}
for(var j = 0; j < cols; j++) {
if(rowValues[0][j] === val) {
s.getRange(row,(j + 1)).setFontColor("blue");
} else {
s.getRange(row,(j + 1)).setFontColor("black");
}
}
}
まず、onEditイベントハンドラーをタップして、スプレッドシートの変更でスクリプトをトリガーします。
function onEdit()
OnEdit関数に名前を付けることで、onEditアクションをオーバーライドすることを自動的に認識します。
注:Docsのイベントハンドラーは少し注意が必要です。ドキュメントは複数のユーザーによる複数の同時編集を処理できるため、イベントハンドラーはサーバー側で処理されます。この構造の主な問題は、イベントトリガースクリプトが失敗すると、サーバーで失敗することです。デバッグ情報を表示したい場合は、イベントが失敗した場合、またはサイレントで失敗した場合にデバッグ情報をメールで送信するトリガーメニューで、明示的なトリガーを設定する必要があります。
行番号を取得します。
var r = s.getActiveRange();
var row = r.getRow();
ここではかなり自明です。アクティブな範囲は、編集中のセルです。
列数を取得します。
var cols = s.getDataRange().getNumColumns();
このためには、スプレッドシート全体のデータ範囲を確認する必要があります。
次に、問題の行のデータを含むデータ範囲を作成する必要があります。
var rowRange = s.getRange(row, 1, 1, cols);
コードのコメントを読んで、値がどうあるべきかを確認してください。
次に、値のテストのために結果をキャッシュします。
var rowRange = s.getRange(row, 1, 1, cols);
Google Docsスクリプトイベントコールバックの性質上、サーバー側で実行されるため、不正使用を防ぐために、Googleはスクリプトの実行に時間制限を設けています。値をキャッシュすることで、スプレッドシートから値を取得するためにサーバーが不必要に多くのラウンドトリップを行うことを防ぎます。
次の2つの部分は、すべての魔法が発生する場所です。
最初に、行のすべてのセルを通過して最小値を見つけます。
var val = 999;
for(var i = 0; i < cols; i++) {
if(val > rowValues[0][i] && rowValues[0][i] !== "") {
val = rowValues[0][i];
}
}
簡単にするために、デフォルトの上限を999に設定します。 これはより適切な値に変更される可能性があります 。秘Theは、値と現在の安値をテストすることです。低い場合は、新しい低い値をマークします。
セル番号に最小値をマークして明示的に設定することで簡単に降りることができますが、複数のセルに最小値がある場合をカバーしたかったのです。
最小値を含む複数のセルを処理するには、2回目のパスが必要です。
for(var j = 0; j < cols; j++) {
if(rowValues[0][j] === val) {
s.getRange(row,(j + 1)).setFontColor("blue");
} else {
s.getRange(row,(j + 1)).setFontColor("black");
}
}
行内のすべてのセルのループは同じままです。今回は、セル値が選択した最小値と一致するかどうかを確認するだけです。一致すると、フォントの色が青に変わります。それ以外の場合、フォントの色は黒に変更されます。
それはそれを要約しています。 Google Apps Scriptingがスプレッドシートとデータセルを参照する方法に慣れるのは少し難しいですが、Docsができないことはあまりありません。
このコードの作成/テストに使用したスプレッドシートに パブリックリンク を作成しました。試してみてください。