2009-06-05 15 views
36

Googleドキュメントスプレッドシートの行の最小セルの色を自動的に変更する方法を探しています。Googleスプレッドシートの自動カラーリング

ので、

1 | 2 | 3 
4 | 2 | 1 
2 | 1 | 6 

のようなテーブルのためにそれはそれで「1」とのすべてのセルに色でしょう。ドロップダウンメニューで

+0

プログラミングに関するものではありません。 – JasonV

+2

条件付き書式設定は、ユーザーインターフェイスで実行されていても、コンピュータが実行できるようなルールセットを定義するために問題を分析する必要があるためプログラミングに関連します仕事。これを考えて、この質問を再開すべきだと思う。 –

+0

すべてのセルを選択し、次のカスタム式を適用します。 '= and(notblock(A1))、A1 = min(1:1))' – pnuts

答えて

57

、Format->条件付き書式...

その後、あなたのルールや、あなたの色を設定します。複数のセルを選択してこれを行うこともできます。

編集:

これは、色分けでできることの範囲です。複雑な数式を見つけてセルの最小値を見つけ、それがセル内のものと一致すればそれを色付けしますが、これが重要なことであればGoogleドキュメントの代わりにExcelを使いたいかもしれません。

+1

条件付き書式を使用して必要なことを達成できない場合は、スクリプトエディタはonEditイベントを修正してセルをチェックし、あなたが想像できるどんな条件にも応じて色付けを変更します。 Excelの必要はありません。 –

+0

これは2015年以降変更されましたが、必要なものを手に入れました! 'Format' - >' Conditional formatting ... ' - >' Color Scale'をクリックすることができます。 – PubNub

+0

@Kekoaクール、アップデートありがとう。 –

26

トリックの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ドキュメントのスクリプトイベントコールバックの性質を悪用を防ぐために、そのサーバー側を実行して、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に設定しました。 This could be change to a more appropriate value。そのトリックは、値と現在のローをテストすることです。それが低い場合は、新しい低い値をマークします。

セル番号を最も低い値に設定して明示的に設定すると、簡単に解消できますが、複数のセルの値が最も低いケースをカバーしたいと考えました。最小値を含む複数のセルを処理

は、第二のパスが必要です。

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がスプレッドシートやデータセルを参照する方法に慣れるのはちょっと難しいですが、ドキュメントではできないことはあまりありません。

私はをこのコードの書き込み/テストに使用したスプレッドシートにしました。気軽に試してみてください。

関連する問題