Mam Arkusze Google, w których produkty są wymienione jako wiersze, a atrybuty jako kolumny. Atrybut każdego produktu jest oceniany w skali 1-10. Moja ostatnia kolumna to średnia z tych wartości (tj =Average(B2:D2)
.). Działa to dobrze, jeśli każdy atrybut ma taką samą wagę.
+--------+-------+-------+-------+---------+
| | Attr1 | Attr2 | Attr3 | Overall |
+--------+-------+-------+-------+---------+
| Prod 1 | 10 | 8 | 9 | 9 |
| Prod 2 | 2 | 10 | 7 | 6.33 |
| Prod 3 | 4 | 6 | 6 | 5.33 |
+--------+-------+-------+-------+---------+
Problem polega na tym, że chcę, aby każdy atrybut miał inną wagę. Na przykład Attr1 może nie być ważny i powinien być wart tylko 50%, podczas gdy Attr3 jest bardzo ważny i powinien być wart 300%.
+--------+-------------+-------+--------------+---------+
| | Attr1 (50%) | Attr2 | Attr3 (300%) | Overall |
+--------+-------------+-------+--------------+---------+
| Prod 1 | 10 | 8 | 9 | 8.89 |
| Prod 2 | 2 | 10 | 7 | 7.11 |
| Prod 3 | 4 | 6 | 6 | 5.78 |
+--------+-------------+-------+--------------+---------+
Wartość dla pierwszego rzędu to:
(10*0.5 + 8*1 + 9*3) / (0.5+1+3) = 8.89
które można obliczyć za pomocą:
(
B2*(IFERROR(REGEXEXTRACT(B1, "\d+"), 100)/100)
+ C2*(IFERROR(REGEXEXTRACT(C1, "\d+"), 100)/100)
+ D2*(IFERROR(REGEXEXTRACT(D1, "\d+"), 100)/100)
) / (
IFERROR(REGEXEXTRACT(B1, "\d+"), 100)/100
+ IFERROR(REGEXEXTRACT(C1, "\d+"), 100)/100
+ IFERROR(REGEXEXTRACT(D1, "\d+"), 100)/100
)
które, jak widać, mogą stać się bardzo trudne do zarządzania w miarę dodawania kolejnych atrybutów. Idealnie szukam rozwiązania, które nie wymaga tworzenia tymczasowych komórek, aby pomóc w obliczeniach.
Czy jest jakaś wbudowana funkcja lub wspólna konwencja, która może pomóc mi obliczyć te średnie ważone?
źródło
$
oznaczają znaki?dollar sign in excel
to samo, ponieważ znajdziesz więcej dokumentacji na ten temat.sumproduct
Jeśli twoje wagi są w rzędzie 2 od B do L, a dane, które chcesz uśrednić, znajdują się w wierszach 3 i wyższych, powiedzmy, możesz użyć sumproduct w następujący sposób:
źródło
Wyglądało na to, że Google nasłuchiwał. Przynajmniej w moim przypadku Arkuszy Google funkcja ta
AVERAGE.WEIGHTED
istnieje. Za pomoc:źródło
Kod Lipisa nie działał dla mnie, więc oto aktualizacja. Ten kod:
współpracuje z bieżącą wersją Arkuszy kalkulacyjnych Google poprawnie adresujących elementy tablicy
sprawdza, czy wartości są liczbami
ma przełącznik do rozważania wartości zerowych lub nie
Kod:
źródło
Poprawianie kodu Lipis do pracy w bieżącej wersji Arkuszy kalkulacyjnych Google:
źródło
#NUM!
w rezultacie dał . Kod Lipis wciąż działa. Ignorujesz tylko zwracaną macierz 2D.ARRAYFORMULA () może obliczyć średnią ważoną w arkuszach kalkulacyjnych Google (i nie tylko).
Przechowywanie odważników oddzielnie w B2: D2 upraszcza czytanie wzoru. Obliczanie średniej ważonej dla E3 wygląda wtedy podobnie do SUMPRODUCT () powyżej (kopiuj / wklej dla E4 i E5):
=ARRAYFORMULA(sum(B3:D3 * $B$2:$D$2)/sum($B$2:$D$2))
Użycie RegExExtract () w celu uzyskania wag od $ B $ 1: $ D $ 1 to prosta zmiana w ARRAYFORMULA (). Zamień prosty zakres na bardziej złożone wyrażenie „
iferror(regexextract($B$1:$D$1,"\d+"),100)/100
”, a formuła dla E3 staje się (kopiuj / wklej dla E4 i E5):=ARRAYFORMULA(sum(B3:D3 * iferror(regexextract($B$1:$D$1,"\d+"),100)/100)/sum(iferror(regexextract($B$1:$D$1,"\d+"),100)/100))
Uwaga: Wyrażenie regularne wymaga nazw atrybutów bez liczb; więc użyj AttrA, AttrB i AttrC zamiast Attr1, Attr2 i Attr3.
źródło
Po uważnym przeczytaniu pytania,
Wymyśliłem to rozwiązanie, które nie wykorzystuje komórek tymczasowych.
Formuła
Zrzut ekranu
Wyjaśnił
REGEXEXTRACT
Będzie wyodrębnić wartość w nagłówku po pierwszej prostej wspornika iVALUE
będzie przekształcić go w szeregu.IFERROR
Będzie ustawiona na wartość100
, jeśli nic nie zostanie znaleziony iARRAYFORMULA
pozwoli, aby wybrać zakres, zamiast pojedynczych komórek.Przykład
Utworzyłem dla Ciebie przykładowy plik: jak obliczyć średnie ważone w Arkuszach kalkulacyjnych Google?
źródło
Ponieważ zaakceptowana odpowiedź korzysta z Google Apps Script, stworzyłem również krótki fragment.
Kod
Zrzut ekranu
Uwaga
Skrypt będzie działał zgodnie z tą samą logiką, jaką przedstawiono w tym poście. Główną zaletą jest to, że jednocześnie obliczy ogólne wartości.
Przykład
Utworzyłem dla Ciebie przykładowy plik: jak obliczyć średnie ważone w Arkuszach kalkulacyjnych Google?
źródło
W przypadku prostych średnich ważonych można po prostu wielokrotnie dodać wartość komórki. Na przykład, jeśli chcesz, aby A1 wynosiła 75%, a B1 25%, możesz włożyć
=AVERAGE (A1,A1,A1,B1)
. Byłoby to specjalnie dla Ciebie,=AVERAGE (B2,C2,C2,D1,D2,D2,D2,D2,D2,D2)
które ważyłoby B2 jako połowę C2 (50%), a D2 jako 3x C2 (300%).Bardziej skomplikowane rzeczy są powyżej mojej oceny płacowej. :)
źródło
W rzeczywistości obie wersje Average.weighted i sumproduct dają ten sam wynik:
Raczej używam pierwszego, ponieważ jest o wiele prostszy w obsłudze, ale nie wiem, jak dodać inne wagi do tej formuły.
Jest to podpowiedź, ale nie wiem, jak dodawać tylko wagi, a nie dodatkowe wartości
źródło
Jest dość prosty sposób używania tylko podanych funkcji.
gdzie zawartość E jest liczbą punktów, a G znaczenie tych punktów.
źródło