Obliczanie zacienionych komórek

10

Korzystam z Arkuszy kalkulacyjnych Google do tworzenia macierzy (czas / aktywność) jako codziennego harmonogramu logowania pracowników.

Czy istnieje formuła do obliczania liczby komórek w kolumnie, które są cieniowane (lub nie cieniowane) określonego koloru?

Na przykład: 20 komórek jest szare, a 31 nie jest szare (zacieniowany na inny kolor) i zamiast ręcznie je zliczać, oblicza to na dole kolumny zasięgu.

salgire
źródło
Problem z rozwiązaniem @ w0lf pochodzi z pamięci podręcznej. Ta funkcja nie jest gotowa do pobierania aktualizacji na żywo. Próbowałem zdobyć tę zdolność, dodając „now ()” jako dodatkowy parametr, ale to nie działało.
ciepło
Nie mogę odpowiedzieć, więc zostawię komentarz. Jeśli komórki nie zawierają żadnego tekstu, łatwiej jest dodać dowolny tekst w tym samym kolorze co tło (więc jest ukryty), a następnie wystarczy wykonać proste = counta (), aby policzyć niepuste komórki. Jeśli oczywiście jest to bardzo specyficzne w zależności od przypadku.
sfratini

Odpowiedzi:

17

Znalazłem sposób, aby to zrobić, korzystając z funkcji skryptowej udostępnianej przez Google Spreadsheet.

Oto jak to zrobić:

  • otwórz swój arkusz kalkulacyjny
  • w menu przejdź do Narzędzia -> Edytor skryptów ...; otworzy się nowe okno, w którym możesz wpisać kod
  • skopiuj poniższy kod
  • wklej kod w oknie edytora skryptów i naciśnij CTRL+, Saby go zapisać
  • zamknij okno edytora skryptów i wróć do arkusza kalkulacyjnego

Kod:

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;
}

Po wykonaniu powyższych kroków w arkuszu kalkulacyjnym dostępne są jeszcze trzy funkcje:

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

Należy pamiętać, że <range specification>i <cell specification>są wyrażone w notacji A1 i muszą być ujęte w cudzysłów .

Na przykład, aby uzyskać liczbę wszystkich komórek z zakresu B2: F13, dla których kolor tła jest ustawiony na biały , należy wprowadzić następującą formułę:

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

i aby obliczyć sumę tych samych komórek, użyj wzoru:

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

Niektóre komórki mogą nie mieć tła w kolorze takim jak „biały”, „szary”, ale podobny do koloru RGB #6fa8dc. Nie możesz zgadnąć, jaki jest kolor, więc jeśli chcesz znaleźć kolor komórki (na przykład B9), wpisz tę formułę w komórce:

=getBackgroundColor("B9")

a następnie użyj tej wartości jako parametru dla dwóch powyższych funkcji.

Wygląda na to, że jeśli kolor tła komórki to „kolor motywu”, getBackground()zawsze niepoprawnie zwraca #ffffff. Nie znalazłem innego rozwiązania niż użycie koloru ze standardowego zestawu.

Ponownie zwróć uwagę na cytaty we wszystkich powyższych przykładach; bez nich formuły nie działałyby.

Cristian Lupascu
źródło
Próbowałem zastosować się do twoich wskazówek, ale w tej dziedzinie używam formuły, którą otrzymuję #LICZBA !, czy wiesz, dlaczego tak jest? Próbowałem przeprowadzić badania, ale nie mogłem znaleźć na to dokładnej odpowiedzi. Dzięki milion, dami
@Dami możesz opublikować tutaj swoją formułę? Sprawdź także pisownię - Myślę, że w nazwach formuł rozróżniana jest wielkość liter
Cristian Lupascu,
getBackgroundColor()Jest przestarzała. Być może możesz zaktualizować kod?
Jacob Jan Tuinstra
Kiedy zmieniam kolor tła na inną, suma nie jest aktualizowana. Czy istnieje sposób automatycznej aktualizacji sumy po wprowadzeniu pewnych zmian?
Michal Kováč,
0

W Dokumentach Google nie znalazłem sposobu bezpośredniego zliczania komórek o określonym kolorze.

Co sprawia, że ​​są zacienione. Czy to jest automatyczne? Jeśli mają wartość, są automatycznie cieniowane? W takim przypadku możesz użyć funkcji counta () do zliczenia dowolnej komórki z wartością. Jeśli w grę wchodzi bardziej złożony zestaw reguł, może być konieczne użycie funkcji countif ().

Uwaga: może być konieczne uwzględnienie dodatkowych wierszy u góry lub u dołu kolumny

mhoran_psprep
źródło