網掛けのセルの計算


10

Googleスプレッドシートを使用して、スタッフがサインインするための毎日のスケジュールとしてマトリックス(時間/アクティビティ)を作成しています。

特定の色で網掛けされている(または網掛けされていない)列のセルの数を計算する数式はありますか?

たとえば、20個のセルが灰色で31個が灰色ではない(他の色の陰影)ので、手動で数える代わりに、リーチ列の下部でこれを計算します。


@ w0lfのソリューションの問題は、キャッシュが原因です。関数はライブ更新を取得する準備ができていません。「now()」を追加パラメーターとして追加することでその能力を獲得しようとしましたが、機能しませんでした。
暖かさ

答えられないのでコメントだけ残しておきます。セルにテキストがない場合は、背景と同じ色のテキストを内部に追加して(非表示にする)簡単です。次に、単純な= counta()を実行して空でないセルをカウントします。もちろん、これは場合によっては非常に具体的です。
sfratini

回答:


17

Googleスプレッドシートが提供するスクリプト機能を使用して、これを行う方法を見つけました。

方法は次のとおりです。

  • スプレッドシートを開きます
  • メニューで、[ツール]-> [スクリプトエディター...]に移動します。これにより、コードを入力できる新しいウィンドウが開きます
  • 以下のコードをコピーしてください
  • スクリプトエディターウィンドウにコードを貼り付け、CTRL+ Sを押して保存します
  • スクリプトエディターウィンドウを閉じて、スプレッドシートに戻ります

コード:

function getBackgroundColor(rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var cell = sheet.getRange(rangeSpecification);
  return cell.getBackground();
}

function sumWhereBackgroundColorIs(color, rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if(cell.getBackground() == color)
        x += parseFloat(cell.getValue());
    }
  }
  return x;
}

function countCellsWithBackgroundColor(color, rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if(cell.getBackground() == color)
        x++;
    }
  }
  return x;
}

上記の手順を実行すると、スプレッドシートで使用できる関数がさらに3つあります。

  • countCellsWithBackgroundColor(<color>, <range specification>)
  • sumWhereBackgroundColorIs(<color>, <range specification>)
  • getBackgroundColor(<cell specification>)

<range specification><cell specification>A1表記で表され、引用符で囲む必要があることに注意してください。

たとえば、B2:F13の範囲で、背景色がに設定されているすべてのセルの数を取得するには、次の数式を入力する必要があります。

=countCellsWithBackgroundColor("white", "B2:F13")

同じセルの合計を計算するには、次の式を使用します。

=sumWhereBackgroundColorIs("white", "B2:F13")

一部のセルでは、背景が「白」、「灰色」などの色に設定されていないことがありますが、のようなRGB色です#6fa8dc。色が何であるかを推測することはできないため、セルの色(たとえば、B9)を確認する場合は、次の数式をセルに入力する必要があります。

=getBackgroundColor("B9")

その後、この値を上記の2つの関数のパラメーターとして使用します。

セルの背景色が「テーマの色」の場合、getBackground()誤って常にが返されるよう#ffffffです。これを回避する方法は、標準セットの色を使用する以外にありません。

繰り返しになりますが、上記のすべての例の引用に注意してください。それらがなければ、数式は機能しません。


私はあなたのヒントに従っていますが、#NUM!を受け取る式を使用するフィールドで、なぜそれを知っていますか?調べてみましたが、正確な答えが見つかりませんでした。100万人に感謝、dami

@Dami、ここに公式を投稿できますか?また、スペルを確認してください-式の名前では大文字と小文字が区別されると思います
Cristian Lupascu

指示に従っているにもかかわらず、ここでゼロを取得しています...

getBackgroundColor()推奨されていません。おそらく、コードを更新できますか?
Jacob Jan Tuinstra 2013

背景色を別の値に変更すると、合計が更新されません。変更したときに合計を自動的に更新する方法はありますか?
MichalKováč2013年

0

Googleドキュメントで特定の色のセルを直接カウントする方法が見つかりませんでした。

何が陰になるのか。自動ですか?それらに値がある場合、自動的に網掛けされますか?その場合は、counta()関数を使用して、値を持つ任意のセルをカウントできます。より複雑なルールのセットが含まれている場合は、countif()関数を使用する必要がある場合があります。

注:列の上部または下部にある追加の行を考慮する必要がある場合があります

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