Я пытаюсь рассчитать средневзвешенное значение для тысяч студентов.
Я могу сделать это для каждого ученика по очереди (СУММА ПРОИЗВЕДЕНИЙ).
Проблема в том, что я не знаю, как сделать это для тысяч студентов одновременно.
У каждого студента разное количество оценок, и каждая оценка имеет разный вес.
Все, что я нашел, это сортировка данных по студенческому коду. И попытка заставить данную формулу работать для меня, пока ключ тот же, повторяется.
Пожалуйста, помогите, как мне это сделать.
решение1
Есть КАК МИНИМУМ два простых способа сделать это. Оба "фильтруют" нужные значения, а затем выполняют арифметические действия.
Один из них прост и использует SUMPRODUCT()
you look to be happy with, но выполняет фильтрацию списка значений, чтобы выбрать соответствующие элементы для работы. Он использует FILTER()
для выбора строк, которые подходят, затем FILTER()
снова использует для выбора столбцов из FILTER()
результатов inner :
=SUMPRODUCT( FILTER( FILTER(B1:D12, B1:B12=I1), {0,1,0}), FILTER( FILTER(B1:D12, B1:B12=I1), {0,0,1}))
Формула, как представлено, предполагает ячейку ввода поиска I1 для поиска студентом. И, конечно, диапазоны для столбцов будут тысячами, а не 12.
Однако для работы с "THHOUSANDS" можно просто использовать столько столбца I, сколько нужно, просто изменив адрес на диапазон. ИЛИ, если one (что кажется вероятным) также означает "All" при указании "тысячи", можно использовать UNIQUE()
с третьим параметром, установленным как FALSE
для извлечения списка отдельных экземпляров каждого имени студента, которое находится в этих "тысячах". Однако даже при создании этого массива, похоже, нельзя просто использовать I1#
для захвата всего результата. Я полагаю, что это связано с разной длиной диапазона поиска и более коротким выводом UNIQUE()
.
FILTER()
на самом деле создает список результатов ИСТИНА/ЛОЖЬ для включенных в него строк. «Фокус» здесь в том, что вы получаете нужные столбцы, напрямую вводя этот список (например: {0,1,0}, чтобы выбрать 2-й столбец). Время, когда жесткое кодирование на самом деле полезно, хотя вы определенно можете создавать эти массивы способами, которые позволяют формуле быть динамической. Просто никогда не нужно, здесь.
Имейте в виду, что можно использовать INDEX()
для выбора столбцов, которые будут использоваться для SUMPRODUCT()
массивов . Лично я считаю, что это проще, но особой разницы нет.
Вот вам и все фантазии. Более старый метод, который будет работать с довольно старыми версиями Excel, просто выполняет сравнения диапазонов, чтобы «отфильтровать» данные и представить их в SUMPRODUCT()
:
=SUMPRODUCT( IF(B1:B12=I1, C1:C12, 0), IF(B1:B12=I1, D1:D12, 0) )
Каждый массив в функции предоставляется с помощью IF()
', которые просто сравнивают диапазон поиска с ячейкой столбца I для строки (да, ни один из подходов не будет SPILL
формулой, поэтому вам нужно скопировать данные вниз до тех пор, пока не UNIQUE()
простирается столбец I) и возвращают данные двух столбцов в параметры функции.
Прямой, ясный и простой, легко понять и поддерживать на протяжении многих лет. Должен быть быстрым, поскольку использует простые тесты ИСТИНА/ЛОЖЬ, а не функции. Ни один из подходов не использует SPILL
функциональность в своей SUMPRODUCT()
колонке, так что нет никакого преимущества ни для одного из них.
Но этот вариант использует только те функции, с которыми вы явно знакомы, так почему бы и нет?
И на самом деле, неприятная часть, составление списка уникальных студентов, использует SPILL
так, что эта задача тоже работает хорошо.