web-dev-qa-db-ja.com

Googleスプレッドシートの条件付き書式設定スクリプト

数式を介してExcelで実行できるのと同様の方法で、Googleスプレッドシートで条件付き書式を使用する方法を理解しようとしています。

セルO2の値が「X」の場合、セルA2を緑に変更します。これは、両方の列でずっと行われます。これにはスクリプトが必要になることはわかっています。

似たリンクに出くわしましたが、自分のニーズに合わせて調整する方法がわかりません。これはできることですか?

リンク: https://webapps.stackexchange.com/questions/16745/google-spreadsheets-conditional-formatting

13
PY_

これは、あなたが説明したことを行うために使用できるスクリプトです。

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var columnO = sheet.getRange(2, 15, sheet.getLastRow()-1, 1);
  var oValues = columnO.getValues();

  for (var i = 0; i < oValues.length; i++) {
    if (oValues[i][0] == 'X') {
      sheet.getRange(i + 2, 1, 1, 1).setBackgroundColor('green');
    }
  }
}
19
Jan Kleinert

新しいGoogleシートでは、スクリプトは必要ありません。

代わりに、条件付き書式でオプション「カスタム数式」を選択し、=O2="X"などの値、またはブール値のtrue/false値を返す式を入力します。

私が言えることから、これらのカスタムスクリプトにリストされている参照は少し奇妙であり、次のように適用されます...

選択した範囲内のセルの場合、「強調表示されているセル」に変更されます。

選択した範囲外のセルの場合は、「その位置と、現在のセルから選択した範囲の左上へのオフセットと同じオフセットに加えて」に変更されます。

つまり、範囲がA1:B2の場合、上記は次のように各セルに個別の書式を設定することと同じです。

A1 =O2="X"
A2 =O3="X"
B1 =P2="X"
B2 =P3="X"

=$O$2="X"などの固定参照を指定することもできます-選択した範囲内のすべてのセルの特定のセルO2をチェックします。

11
Dewi Morgan

(2017年2月)別の回答で述べたように、Googleスプレッドシートでは、ユーザーインターフェースから直接 条件付き書式 を追加できるようになりました。デスクトップ/ラップトップ、AndroidまたはiOSデバイスのどちらにあるか。

同様に、 Google Sheets API v4 (およびそれ以降)を使用して、開発者は条件付き書式ルールをCRUDするアプリケーションを作成できるようになりました。詳細は guidesamples のページと reference docs{add,update,delete}ConditionalFormatRule)。このガイドでは、このPython=スニペット(ファイルIDをSHEET_IDおよびSHEETSをAPIサービスエンドポイントとして):

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は さまざまな言語 をサポートしているため、オプションがあります。とにかく、そのコードサンプルはシートをフォーマットし(下の画像を参照)、年齢の中央値より若い人は薄い赤で強調表示され、中央値を超える人はデータが赤いフォントで色付けされます。

Conditional formatting example


公共サービスの案内

最新のSheets APIは、以前のリリースでは利用できなかった機能を提供します。つまり、ユーザーインターフェースを使用しているかのようにプログラムからシートにアクセスできます(条件付き書式[!]、固定行、セル書式、行/列のサイズ変更、ピボットテーブルの追加、チャートの作成など)。

APIを初めて使用する場合で、APIの使用例を少し長く、より一般的な「実際の」例で確認したい場合は、さまざまなビデオと関連するブログ投稿を作成しました。

ご覧のとおり、Sheets APIは主にdocument向けの機能であり、前述のようにfileを実行しますアップロードとダウンロード、インポートとエクスポート(アップロードとダウンロードと同じですが、さまざまな形式との変換と同じ)などのレベルのアクセス。代わりに Google Drive API を使用します。 Drive APIの使用例:

  • GoogleスプレッドシートをCSVとしてエクスポート(ブログ post のみ)
  • 「貧乏人のプレーンテキストからPDFへ」コンバーター(ブログ 投稿 のみ)(*)

(*)-TL; DR:プレーンテキストファイルをドライブにアップロードし、Googleドキュメント形式にインポート/変換してから、そのドキュメントをPDFとしてエクスポートします。上記の投稿ではDrive API v2を使用しています。 this follow-up post は、Drive API v3への移行について説明しています。ここに video 両方の「貧乏人のコンバーター」の投稿を組み合わせています。

5
wescpy

最新の Sheet API を使用すると、プログラムで条件付き書式ルールをシートに追加して、強調表示を行うことができます。

次のように、列Aの背景色を緑に設定するカスタム数式ルールを追加できます。ここで、列Oは「X」です。

function applyConditionalFormatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');

  var numRows = sheet.getLastRow();
  var rangeToHighlight = sheet.getRange("A2:A" + numRows);
  var rule = SpreadsheetApp.newConditionalFormatRule()
      .whenFormulaSatisfied('=INDIRECT("R[0]C[14]", FALSE)="X"')
      .setBackground("green")
      .setRanges([rangeToHighlight])
      .build();

  var rules = sheet.getConditionalFormatRules();
  rules.Push(rule);
  sheet.setConditionalFormatRules(rules);
}

条件付き書式が適用される範囲は、シートの行2から最後の行までのA列です。

カスタム式は次のとおりです。

=INDIRECT("R[0]C[14]", FALSE)="X"

つまり、選択した範囲列の右側に14列移動して、その値が「X」かどうかを確認します。

列Oは、列Aの右側に14列あります。

1
Joman68