Jestem nowy w skrypcie Google Apps i chciałbym utworzyć funkcję dla arkusza kalkulacyjnego, który sumuje wartości komórek, gdy komórki spełniają określone kryteria, takie jak kolor tła. Ponadto chciałbym przekazać zakres jako tablicę i nie używać notacji A1 z następującego powodu.
Znalazłem funkcję, która używa notacji A1 tutaj . Problem polega na tym, że kiedy mam go w danej komórce
=sumWhereBackgroundColorIs("white", "A1:A10")
i kopiuję wartość do prawej sąsiedniej komórki, wynik będzie ponownie
= sumWhereBackgroundColorIs („biały”, „A1: A10” )
podczas gdy chciałbym mieć
= sumWhereBackgroundColorIs („biały”, „B1: B10” )
w przeciwnym razie zawsze muszę ręcznie modyfikować argument wejściowy i chcę tego uniknąć, ponieważ muszę intensywnie korzystać z tej funkcji.
Dlatego próbowałem, przekazując zakres jako tablicę wartości za pomocą
=sumIfBgColor(#ffffff, A1:A10)
function sumIfBgColor(color, range){
var x = 0;
for(var i = 0; i < range.length; i++){
for(var j = 0; j < range[i].length; j++){
var cell = getCell();
if(cell.getBackgroundColor() == color)
x += parseFloat(range[i][j]);
}
}
return x;
}
ale nie wiem, jak uzyskać komórkę (tj. obiekt typu Range), zaczynając od tego, co mam.
źródło
A1 notation
.Odpowiedzi:
Na twierdzenie @ Jacoba o niemożliwości, obalam to w ten sposób ... (ale dziękuję za lepszą prędkość)
za pomocą:
z następującymi funkcjami zrobi to, co chcesz.
źródło
Odwołanie: http://igoogledrive.blogspot.com/2015/11/google-spreadsheet-sum-of-colored-cells.html
Zamiast przekazywania parametrów jako ciągu do funkcji niestandardowej, następujący skrypt przyjmuje dane wejściowe jako zakres:
Spójrz na następujący zrzut ekranu:
źródło
Poniższy mały skrypt załatwi sprawę.
Kod
Wyjaśnione
Najpierw określany jest aktywny arkusz kalkulacyjny. Następnie pobierane są zarówno wartości, jak i kolory oparte na zakresie. Wartości zostaną wykorzystane do iteracji kolorów i ostatecznie podsumowania.
Stosowanie
Przykład
Stworzyłem dla Ciebie przykładowy plik: Suma na podstawie tła
źródło