Sumuj dane na podstawie koloru komórki w arkuszach kalkulacyjnych Google

14

Widziałem to pytanie i chociaż mam ten sam problem, odpowiedź na to pytanie nie jest pomocna w mojej sprawie.

Mam duże arkusze kalkulacyjne, które są często zmieniane. Tak więc, zgodnie z rozwiązaniem przyjętym na to pytanie, trudno jest powielić wszystkie wypełnione kolumny i kłopotliwe jest edytowanie jeszcze jednej komórki za każdym razem, gdy chcę zmienić kolory tła komórek.

Czy nie ma sposobu sumowania danych na podstawie warunku dotyczącego koloru tła komórki w Arkuszach kalkulacyjnych Google?

Weslei
źródło

Odpowiedzi:

14

Sprawdź, czy moja odpowiedź na podobne pytanie pomaga.

Aktualizacja:

Moje zgłoszenie do galerii Skryptów Dokumentów Google zostało zaakceptowane i możesz je zainstalować, aby uzyskać żądaną funkcjonalność.

Kroki:

  • Otwórz arkusz kalkulacyjny
  • W menu przejdź do Narzędzia -> Galeria skryptów ...
  • Wyszukaj sumę według koloru
  • Kliknij Zainstaluj
  • Kliknij przycisk Autoryzuj , jeśli ufasz skryptowi, a następnie Zamknij
  • wróć do arkusza kalkulacyjnego

Teraz masz trzy dodatkowe funkcje, których możesz użyć w formule arkusza kalkulacyjnego:

  • sumWhereBackgroundColorIs(color, rangeSpecification)
  • sumWhereBackgroundColorIsNot(color, rangeSpecification)
  • getBackgroundColor(rangeSpecification)

Proszę od tego rangeSpecificationparametry wymagają cudzysłowów ( ") wokół nich.

Na przykład:

=sumWhereBackgroundColorIs("white", "A1:C4")

sumuje wartości wszystkich komórek z zakresu A1: C4, które mają białe tło.

Pamiętaj, że jeśli nie znasz koloru określonej komórki, możesz użyć dostarczonej getBackgroundColorfunkcji, aby dowiedzieć się, jaki jest kolor. Ta funkcja jest konieczna, ponieważ niektóre kolory są wyrażone jako kody RGB (na przykład #00ff00zamiast green).

Cristian Lupascu
źródło
2
getBackgroundColor()Jest przestarzała. Być może możesz zaktualizować kod?
Jacob Jan Tuinstra
2
@JacobJanTuinstra Zaktualizowałem kod, ale przeglądanie mojego zgłoszenia zajmuje trochę czasu. W międzyczasie możesz użyć tego kodu
Cristian Lupascu
2
@dom tak, jest: github.com/clupascu/GoogleApps_SumByColor/blob/master/… . Niezbyt ładne rozwiązanie, ale działa.
Cristian Lupascu
2
Galeria skryptów została zastąpiona dodatkami. Nie mogę znaleźć „sumy według koloru” w dodatkach. Czy musisz przesłać skrypt do dodatków, aby był tam dostępny?
Jeff Lockhart
3
@ w0lf Wydaje się, że nowe arkusze kalkulacyjne Google nie obsługują już galerii skryptów. Przekierowuje z komunikatem do nowych dodatków. Edytor skryptów jest nadal dostępny i użyłem tam twojego kodu. Zrobiłem rozwidlenie i dodałem obsługę pomijania pustych (nienumerycznych) komórek w sumie (w przeciwnym razie wystąpi błąd, jeśli puste komórki istnieją w zakresie): gist.github.com/jeffdgr8/1553faa6360ad04e9c17
Jeff Lockhart
2

Oto jak dostałem to do pracy:

  1. Otwórz Tools>Script Editor

  2. Wklej poniższy kod, zapisz skrypt

  3. Wróć do arkusza kalkulacyjnego. Użyj z =countColoredCells(A1:Z5,C5)gdzie C5jest komórka z kolorem do policzenia.

Kod:

/**
* @param {range} countRange Range to be evaluated
* @param {range} colorRef Cell with background color to be searched for in countRange
* @return {number}
* @customfunction
*/

function countColoredCells(countRange,colorRef) {
  var activeRange = SpreadsheetApp.getActiveRange();
  var activeSheet = activeRange.getSheet();
  var formula = activeRange.getFormula();

  var rangeA1Notation = formula.match(/\((.*)\,/).pop().trim();
  var range = activeSheet.getRange(rangeA1Notation);
  var bg = range.getBackgrounds();
  var values = range.getValues();

  var colorCellA1Notation = formula.match(/\,(.*)\)/).pop().trim();
  var colorCell = activeSheet.getRange(colorCellA1Notation);
  var color = colorCell.getBackground();

  var count = 0;

  for(var i=0;i<bg.length;i++)
    for(var j=0;j<bg[0].length;j++)
      if( bg[i][j] == color )
        count=count+1;
  return count;
};

Kredyty kodowe (zmienione): http://igoogledrive.blogspot.lt/2015/11/google-spreadsheet-count-of-colored.html

Kai Noack
źródło
Pojawia się błąd Nie znaleziono zakresu ???? : ((
Kegham K.,
im TypeError: Cannot call method "pop" of null. (line 13, file "Code")Dismiss
get