усреднение каждой n-й строки и исключение значений - PullRequest
0 голосов
/ 05 марта 2019

Я хочу усреднить каждые 5 строк, но также исключить из средних значений, которые меньше 50. Это команда для усреднения каждые 5 строк.

=AVERAGE(OFFSET($L$3,(ROW()-ROW($P$2))*5,,5))

Это команда для исключения значенийменее 50

=AVERAGEIF(L3:L8,">50")

Как мне объединить эти два в одной команде?

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Пока у вас есть Excel 2016, будет работать формула SUMPRODUCT.

=SUMPRODUCT((MOD(ROW($A$1:$A100),5)=0)*($A$1:$A$100<50)*$A$1:$A$100)/SUMPRODUCT((MOD(ROW($A$1:$A100),5)=0)*($A$1:$A$100<50)*1)

Я предположил, что ваши данные были в A1:A100, поэтому обновите их при необходимости.И в формуле MOD я использовал 5 для 5-го ряда.Если вам нужно это изменить, измените 5 в MOD формулах.Наконец, в формулу не входит значение 50, поскольку вы заявили, что хотите меньше 50.

0 голосов
/ 05 марта 2019

'Крошечные' различия

Исправление

=IFERROR(AVERAGEIF(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5),">50"),0)

Визуализация

Давайте сначала представим, что вы на самом деле делаете.

enter image description here

Для каждых пяти строк в столбце L отображается среднее значение, если оно больше или равно 50. (в данном примере) в столбце G:

For L3:L8 in G2,
for L9:L13 in G3,
for L14:L18 in G4 etc.

Проблемы

  • Первая проблема заключается в том, что формула написана исключительно для строки 2nd .Если вы хотите, чтобы первый результат отображался в первой строке, формула приведет к ошибке REF!.

    Если вы хотите отобразить первый результат в 1-й строке, вам нужно изменить L$2на L$1:

    =IFERROR(AVERAGEIF(OFFSET(L$3,(ROW()-ROW(L$1))*5,,5),">50"),0)
    

    или на 3-ю строку необходимо изменить L$2 на L$3:

    =IFERROR(AVERAGEIF(OFFSET(L$3,(ROW()-ROW(L$3))*5,,5),">50"),0)
    
  • Вторая проблема заключается в том, что вы что-то делаете в столбце L, и без видимой причины вы используете столбец P в своей формуле.Вы могли использовать любой столбец Z, AN или CG, но вы выполняете какие-то действия в столбце L, поэтому используйте L.

  • Третья проблемачто вы заблокировали столбцы $L, что означает, что если вы поместите формулу в одну строку, результат будет одинаковым.Если вы не заблокируете их, вы можете скопировать формулу, например, справа, и она отобразит результаты для столбцов M, N, O и т. Д.:

    enter image description here

Другие формулы

=SUM(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5))
=COUNT(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5))
=AVERAGE(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5))
=SUMIF(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5),">50")
=COUNTIF(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5),">50")

AVERAGEIF доступны в Excel из версии 2007, но для более старых версий вместо них можно использовать следующую формулу:

=IF(COUNTIF(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5),">"&50)=0,0,SUMIF(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5),">"&50)/COUNTIF(OFFSET(L$3,(ROW()-ROW(L$2))*5,,5),">"&50))

Сначала проверяется, приведет ли COUNTIF к 0.Если это так, он отображает 0, в противном случае он делит SUMIF на COUNTIF.

0 голосов
/ 05 марта 2019

Благодаря моему коллеге, следующее работает как драгоценный камень.

=IFERROR(AVERAGEIF(OFFSET($L$3,(ROW()-ROW($P$2))*5,,5),">50"),0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...