別のセルの値に依存する特定のセルに条件付き書式を設定するにはどうすればよいですか?


69

私の例では、条件付きで列Bのセルをフォーマットします。xでマークされたものは、列Aの値に従ってフォーマットする必要があります(この例では値はです1)。

A | B
1 | x
2 | 
3 | 
1 | x
1 | x
4 | 
8 |

// x can be any value and is here merely to mark the cell that should be formatted

重要2014注:他のセルを含む可能性のある数式に基づく条件付き書式設定がGoogleスプレッドシートで可能になり、Excelスプレッドシートの動作と非常によく似た動作をします。 この回答では、その使用について説明します。


3
2014年のメモを追加したため、チェックマークを最新のアプローチを説明する回答に移動することも検討してください。

回答:


50

複雑な条件付き書式設定は、Google Apps Scriptを使用してGoogleスプレッドシートで実現できます。たとえば、セルの1つの値に基づいて行全体の背景色を変更する関数を作成できます。これは、「ルールで色を変更」メニューでは不可能だと思います。「編集時」、「オープン時」、「フォーム送信時」など、この機能のトリガーを設定することをお勧めします。

setBackgroundRGB()関数のドキュメント

更新:これは、列Aの値に基づいて行全体の背景色を変更するGoogle Appsスクリプトの例です。値が正の場合は、緑を使用します。空の場合、白。それ以外の場合、赤。この公開のGoogleスプレッドシートで結果をご覧ください。(スクリプトを実行するにはサインインする必要がありますが、サインインしなくても結果を確認できます)。

function colorAll() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var endRow = sheet.getLastRow();

  for (var r = startRow; r <= endRow; r++) {
    colorRow(r);
  }
}

function colorRow(r){
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 1, 1, 3);

  var data = dataRange.getValues();
  var row = data[0];

  if(row[0] === ""){
    dataRange.setBackgroundRGB(255, 255, 255);
  }else if(row[0] > 0){
    dataRange.setBackgroundRGB(192, 255, 192);
  }else{
    dataRange.setBackgroundRGB(255, 192, 192);
  }

  SpreadsheetApp.flush(); 
}

function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 2) {
    colorRow(r);
  }
}

function onOpen(){
  colorAll();
}


13行目でエラーが発生しました:var dataRange = sheet.getRange(r、1、1、3); このスクリプトを使用して、特定の名前(Davidなど)に従って行を色付けする場合、どのように変更しますか。そして、おそらく背景の代わりにフォントを変更します:setFontColorまた、スプレッドシートでスクリプトを実行するにはどうすればよいですか?ありがとう

2
例へのリンクは無効になりました。このスクリプトを作成したら、どのように使用しますか?これはこの答えにはありません。
ダニエルウィリアムズ

3
以下の回答で説明するように、最も一般的なユースケースのためのよりシンプルなオプションがあります。
サムブライトマン

1
Googleスプレッドシートのリンクは残念ながら壊れています。スクリプトの使用方法/アクティブ化方法について簡単に説明していただければ幸いです。それにもかかわらず、うまくいく素晴らしい答え。:)
ブリムボリウム14

19

新しいGoogleスプレッドシートで説明するように、あなたがこれを行うことができますここで。記事で説明されているように、まずGoogleドライバー設定で新しいスプレッドシートを有効にする必要があります。次に、条件付き書式設定オプションから「カスタム式は」を選択し、任意の式を入力できます(=プレフィックスの追加を忘れないでください!)。$接頭辞のないセル参照は、期待どおりに範囲に適用されると自動的に調整されます。

古いものから新しいものへの移行のサポートが不足しているようです。これは新しいシートにのみ適用され、値を一方から他方にコピーできるだけであることがわかりました。シート全体をコピーすることもできます。


1
これを指摘してくれてありがとう。それは本当に私が望んでいるとおりに動作します。
ロバートKoritnik

現時点では、古いスプレッドシートのほとんどは新しいGoogleスプレッドシートに移行されていたため、移行のサポートに関するメモは廃止されました。
ルベン

2

基本的な条件付き書式設定のニーズのほとんどをカバーするために、Apps-Script を使用してこのWebアプリColor Code +を作成しました。いくつかのルールを投入すると、コードが吐き出され、[ ツール] →[ スクリプトエディター...]でスプレッドシートに貼り付けることができます。(Googleフォーラムのヘルプスレッド。)


1

Googleスプレッドシートの条件付き書式ルールは、2つのセルの合計が3番目のセルと異なる場合に、背景を赤で条件付きで書式設定する場合、次のようになります。

単一の色とカスタム式を使用したGoogleスプレッドシートの条件付き書式ルール


0

条件付き書式設定-カスタム式

range 2:227

= if($i:$i = "Duplicate",True,False)

行を強調表示する色を選択します。


0

(2017年2月)別の回答で述べたように、Googleスプレッドシートでは、ユーザーがデスクトップ/ラップトップ、Android、iOSデバイスのいずれであっても、ユーザーインターフェイスから条件付き書式を直接追加できるようになりました。ただし、この答えの残りの部分は、アプリを「行う」条件付き書式を作成できるため、主に開発者向けです。

GoogleのシートのAPI v4の(以降)、開発者は、条件付き書式ルールをCRUDアプリケーションを作成することができます。詳細とリファレンスドキュメント(を検索)については、ガイドサンプルページをご覧ください。ガイドは、(のファイルIDと仮定すると、このPythonのスニペット特徴とAPIサービス・エンドポイントなど)を:{add,update,delete}ConditionalFormatRuleSHEET_IDSHEETS

myRange = {
    'sheetId': 0,
    'startRowIndex': 1,
    'endRowIndex': 11,
    'startColumnIndex': 0,
    'endColumnIndex': 4,
}

reqs = [
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {'textFormat': {'foregroundColor': {'red': 0.8}}}
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {
                    'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4}
                },
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
]

SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body={'requests': reqs}).execute()

Pythonに加えて、Google APIはさまざまな言語をサポートしているため、オプションがあります。とにかく、そのコードサンプルは、年齢の中央値よりも若い人が明るい赤で強調表示され、中央の年齢以上の人がデータが赤のフォントで色付けされるようにシート(下の画像を参照)をフォーマットします。

条件付き書式の例

注:ここでの私の答えは、この質問の SOの答えと同じです。ただし、PSA は1か所以上に住む必要がないため、PSAを削除しました。


SO参照の質問にも、この質問に対するいくつかの回答があります。この回答が参照する「別の回答」はどれですか?(:反対側では、このサイトに来た人はコードを書くことができますが、ほとんどの人はこれをカスタム関数/ユーザー定義関数のように「エンドユーザー開発」として行うと思います。CRUDそれらのほとんどが、彼らはこの答えに含まれている有用なすべての詳細を見つけることができることが知られている。
ルベン・

0

「新しい」シートのQの詳細に対処するには、B:Bから条件付き書式をクリアし、ColumnBを選択してカスタム式を適用することをお勧めします。

=A1=1

選択の書式設定とDone


0

条件付き書式を編集するときは、[ カスタム式]を選択し、次を使用します...

=if(A1 = 1 , true)

色を選択すれば完了です。


-1

質問の説明に応じて編集します。

Googleスプレッドシートウィンドウには、[ルールで色を変更する]オプションを備えた[フォーマット]メニューがあります。これは、Googleスプレッドシートの条件付き書式設定と同じくらい技術的です。私が知る限り、1つのセルを別のセルの値に基づいて色付けする方法はありません。他のセルの数式を入力することはできません。

列Bに他のデータを入れない限り、列Bのすべてを列Aと等しくし、「ルールで色を変更」オプションを使用して、すべてのセルを1の値で同じ色で着色できます。値が1の場合は赤の背景と赤のテキスト、そうでない場合は白の背景と白のテキスト、列Bの値を事実上非表示にします。これにより、希望の外観が得られます。

Excelでは、必要なことができます。例としてデータを使用して、この式が真の場合、条件付きでB1をフォーマットしました。

=IF(A1=1,true,false)

次に、書式設定を下にドラッグします。これにより、列Aの隣にあるBのセルのみが強調表示され、1に等しくなりました。

Excelはできますが、Googleはできません


元の回答

2列でこれができるかどうかはわかりませんが、3列でできることはわかっています。

 A  |  B  |  C
----------------
 1  |  f  |  x

B列では、IF式を使用して、適切なC列にxが配置されているかどうかを確認できます。

=IF(C1="x",A1,"") 

IFテスト、 -式は3つの部分があり、その後値、及び他の値。上記の例では、式xはC列にあるかどうかを確認します。存在する場合はA1から値を入力し、存在しない場合は空白を入力します。xが大文字であるか小文字であるかは関係ありません。

リストの一番上にこの式を入力したら、ドラッグ機能を使用して、リストの残りの部分で式を下にドラッグできます。セルが青で強調表示された状態で、カーソルが十字に変わるまでマウスを右下隅の四角形の上に移動します。次に、クリックしたまま下にドラッグして、下のセルに数式をコピーします。


1
あなたは私を誤解したと思います。問題は、セルに値を配置しない条件付き書式設定についてです。
ロバートKoritnik 09

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.