23

同じ背景色のセルの数を数えて、結果をGoogle Appsスクリプトのスクリプトで別のセルに入れようとしていますが、できません。次のスクリプトがありますが、機能せず、どれが問題なのかわかりません:

function countbackgrounds() {
 var book = SpreadsheetApp.getActiveSpreadsheet();
 var range_input = book.getRange("B3:B4");
 var range_output = book.getRange("B6");
 var cell_colors = range_input.getBackgroundColors()[0];
 var color = "#58FA58";
 var count = 0;

 for( var i in cell_colors )
  if( cell_colors[i] == color ){
    range_output.setValue(++count);
  }
  else {
    return count; 
  }
 }  
4

5 に答える 5

23

Google Sheets Power Toolsを使用して手動でコーディングしたくない場合の簡単な解決策:

注: この回答が書かれた時点ではツールは無料でしたが、現在は年間 43.20 ドル、生涯ライセンスで 89.95 ドルです!

  1. アドオン パネル (アドオン -> アドオンの取得) から Power Tools をインストールします。
  2. Power Tools サイドバーから Σ ボタンをクリックし、そのメニュー内で [Sum by Color] メニュー項目をクリックします。
  3. 検索したいカラーマークアップのある「パターンセル」を選択
  4. カウントしたいセルの「ソース範囲」を選択します
  5. 使用関数は「COUNTA」に設定する必要があります
  6. 「関数の挿入」を押すと完了です:)
于 2015-05-16T12:06:54.963 に答える
11
function countbackgrounds() {
 var book = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = book.getActiveSheet();
 var range_input = sheet.getRange("B3:B4");
 var range_output = sheet.getRange("B6");
 var cell_colors = range_input.getBackgroundColors();
 var color = "#58FA58";
 var count = 0;

 for(var r = 0; r < cell_colors.length; r++) {
   for(var c = 0; c < cell_colors[0].length; c++) {
     if(cell_colors[r][c] == color) {
       count = count + 1;
     }
   }
 }
    range_output.setValue(count);
 }
于 2013-01-16T19:28:28.437 に答える
1

ここに作業バージョンがあります:

function countbackgrounds() {
 var book = SpreadsheetApp.getActiveSpreadsheet();
 var range_input = book.getRange("B3:B4");
 var range_output = book.getRange("B6");
 var cell_colors = range_input.getBackgroundColors();
 var color = "#58FA58";
 var count = 0;

 for( var i in cell_colors ){
 Logger.log(cell_colors[i][0])
  if( cell_colors[i][0] == color ){ ++count }
  }
range_output.setValue(count);
 }  
于 2013-01-16T19:30:01.853 に答える
1

以前の関数はうまくいかなかったので、上記の答えの 1 つと同じロジックを使用する別の関数を作成しました。セル内の数式を解析して、参照されているセルの範囲を調べてから、色付きのものを探します。細胞。ここで詳細な説明を見つけることができます:参照で色付けされた Google Script countですが、コードは以下のとおりです。

function countColoured(reference) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var args = formula.match(/=\w+\((.*)\)/i)[1].split('!');
  try {
    if (args.length == 1) {
      var range = sheet.getRange(args[0]);
    }
    else {
      sheet = ss.getSheetByName(args[0].replace(/'/g, ''));
      range = sheet.getRange(args[1]);
    }
  }
  catch(e) {
    throw new Error(args.join('!') + ' is not a valid range');
  }
  var c = 0;
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
      c = c + ( range.getCell(i,j).getBackground() == "#ffffff" ? 0 : 1 );
    }
  }
  return c > 0 ? c : "" ;
}
于 2020-05-29T08:10:10.927 に答える