Усреднить сумму строк без создания нового столбца в Excel

Вот образец моей матрицы:

A   B   C   D   E
1   0   0   1   1
0   0   0   0   0

0   0   1   1   0
0   2           1

Вы можете рассматривать каждую строку как респондента, а каждый столбец - как элемент анкеты.

Моя цель состоит в том, чтобы взять среднее значение суммы каждой строки (т. Е. Общую оценку для каждого респондента), не создавая новый столбец И не учитывая тот факт, что некоторые или все записи в данной строке являются пустыми (например, некоторые респонденты
пропустили некоторые пункты [см. строку 5] или не заполнили анкету полностью [см. строку 3]).

Желаемое решение для этой матрицы = 1,67, посредством чего

[1+0+0+1+1 = 3] + [0+0+0+0+0 = 0] + [0+0+1+1+0 = 2]/3 == 5/3 = 1,67

Как видите, мы усреднили по трем значениям, несмотря на то, что было пять строк, потому что в одной отсутствуют данные.

Я уже могу взять среднее значение суммы строк, которые суммируются только для не пропущенных записей, например:

=AVERAGE(IF(AND(A1<>"",B1<>"",C1<>"",D1<>"",E1<>""),SUM(A1:E1)),IF(AND(A2<>"",B2<>"",C2<>"",D2<>"",E2<>""),SUM(A2:E2)),IF(AND(A3<>"",B3<>"",C3<>"",D3<>"",E3<>""),SUM(A3:E3)),IF(AND(A4<>"",B4<>"",C4<>"",D4<>"",E4<>""),SUM(A4:E4)),IF(AND(A5<>"",B5<>"",C5<>"",D5<>"",E5<>""),SUM(A5:E5)))

Однако это приводит к значению 1, поскольку обрабатывает любую строку с некоторыми или всеми значениями значений как = 0.

Это делает следующее:

[1 + 0 + 0 + 1 + 1 = 3] + [0 + 0 + 0 + 0 + 0 = 0] + [0 + 0 + 0 + 0 + 0 = 0] + [0 + 0 + 1 + 1 +0 = 2] + [0 + 0 + 0 + 0 + 0 = 0] / 4 == 5/5 = 1

У кого-нибудь есть идеи о том, как адаптировать текущий код для усреднения по непропущенным значениям или альтернативного способа достижения желаемого результата?

2 ответа

Решение

Вы можете сделать это более кратко с формулой массива, но краткий ответ, чтобы исправить вашу существующую формулу, если у вас где-то есть пустая ячейка (скажем, это F1), AVERAGE будет игнорировать пустые ячейки, поэтому измените формулу на

=AVERAGE(IF(AND(A1<>"",B1<>"",C1<>"",D1<>"",E1<>""),SUM(A1:E1),F1),IF(AND(A2<>"",B2<>"",C2<>"",D2<>"",E2<>""),SUM(A2:E2),F1),IF(AND(A3<>"",B3<>"",C3<>"",D3<>"",E3<>""),SUM(A3:E3),F1),IF(AND(A4<>"",B4<>"",C4<>"",D4<>"",E4<>""),SUM(A4:E4),F1),IF(AND(A5<>"",B5<>"",C5<>"",D5<>"",E5<>""),SUM(A5:E5),F1))

Это будет одна версия формулы массива для вашей формулы - она ​​использует OFFSET, чтобы извлечь каждую строку матрицы, а затем SUBTOTAL, чтобы увидеть, есть ли в каждой ячейке в этой строке число. Затем он снова использует SUBTOTAL для определения суммы каждой строки и AVERAGE для получения среднего числа строк.

=AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A5)-ROW(A1),0,1,COLUMNS(A1:E1)))=COLUMNS(A1:E1),SUBTOTAL(9,OFFSET(A1,ROW(A1:A5)-ROW(A1),0,1,COLUMNS(A1:E1))),""))

Должен быть введен как формула массива с помощью CtrlShiftEnter

Примечание 1 - некоторым людям не нравится использовать OFFSET, потому что он нестабилен - вы можете вместо этого использовать умножение матриц, но это, возможно, менее легко понять.

Примечание 2 - я использовал "" вместо ссылки на пустую ячейку. Интересно, что формуле без массива нужна фактическая пустая ячейка, а формуле массива - пустая строка.

Вы можете опустить пустую строку

=AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A5)-ROW(A1),0,1,COLUMNS(A1:E1)))=COLUMNS(A1:E1),SUBTOTAL(9,OFFSET(A1,ROW(A1:A5)-ROW(A1),0,1,COLUMNS(A1:E1)))))

По сути, то, что вы описываете здесь для достижения желаемого результата, это =AVERAGEA()функция

Функция Microsoft Excel AVERAGEA возвращает среднее (среднее арифметическое) предоставленных чисел.Функция AVERAGEA отличается от функции AVERAGE тем, что она рассматривает TRUE как значение 1 и FALSE как значение 0.

Имея это в виду, формула должна выглядеть следующим образом.

=SUM(AVERAGEA(A1:A4),AVERAGEA(B1:B4),AVERAGE(C1:C4),AVERAGEA(D1:D4),AVERAGEA(E1:E4))

Дает ожидаемый результат:


Обратите внимание, если вы хотите ROUND() результат до двух цифр, добавьте к нему следующую формулу:

=ROUND(SUM(AVERAGEA(A1:A4),AVERAGEA(B1:B4),AVERAGE(C1:C4),AVERAGEA(D1:D4),AVERAGEA(E1:E4)), 2)
Другие вопросы по тегам