
Estoy intentando calcular un promedio ponderado para miles de estudiantes.
Puedo hacer esto para alumnos individuales por turno (SUM PRODUCTOS).
El problema es que no sé cómo hacer esto para miles de estudiantes al mismo tiempo.
Cada estudiante tiene un número diferente de calificaciones y cada calificación tiene un peso diferente.
Todo lo que encontré fue ordenar los datos según el Código de Estudiante. Y al intentar que la fórmula dada cuente para mí, siempre que la clave sea la misma, se repite.
Por favor ayuda como puedo hacer esto
Respuesta1
Hay AL MENOS dos formas sencillas de hacerlo. Ambos "filtran" los valores deseados y luego hacen la aritmética.
Uno es sencillo y utiliza el SUMPRODUCT()
aspecto con el que parece estar satisfecho, pero realiza un filtrado en la lista de valores para elegir los elementos apropiados con los que trabajar. Se utiliza FILTER()
para elegir las filas que califican, luego se usa FILTER()
nuevamente para elegir las columnas de los FILTER()
resultados internos:
=SUMPRODUCT( FILTER( FILTER(B1:D12, B1:B12=I1), {0,1,0}), FILTER( FILTER(B1:D12, B1:B12=I1), {0,0,1}))
La fórmula, tal como se presenta, supone una celda de entrada de búsqueda de I1 para que la busque el estudiante. Y, por supuesto, los rangos de las columnas serían miles, no 12.
Sin embargo, para trabajar con "MILES", uno puede simplemente usar tanta columna I como sea necesario, simplemente cambiando la dirección a un rango. O, si uno (como parece probable), también significa "Todos" cuando se dice "miles", se puede usar UNIQUE()
con su tercer parámetro establecido para FALSE
extraer una lista de instancias únicas de cada nombre de estudiante que se encuentra en esos "miles". Sin embargo, incluso si se crea esa matriz, parece que no se puede usar simplemente I1#
para capturar el resultado completo. Creo que esto se debe a las diferentes longitudes del rango de búsqueda y al resultado más corto de UNIQUE()
.
FILTER()
en realidad crea una lista de resultados VERDADEROS/FALDOS para las filas incluidas en ella. El "truco" aquí es que obtienes las columnas que deseas escribiendo directamente esa lista (por ejemplo: {0,1,0} para seleccionar la segunda columna). Un momento en el que la codificación es realmente útil, aunque definitivamente puedes crear esas matrices de manera que permitan que la fórmula sea dinámica. Aquí nunca es necesario.
Tenga en cuenta que se podrían utilizar INDEX()
para seleccionar las columnas que se utilizarán para SUMPRODUCT()
las matrices. Personalmente creo que esto es más fácil, pero no hay mucha diferencia.
Demasiado para la fantasía. Un método más antiguo, que funcionará con versiones bastante antiguas de Excel, simplemente haga comparaciones de rangos para "filtrar" los datos y presentarlos a SUMPRODUCT()
:
=SUMPRODUCT( IF(B1:B12=I1, C1:C12, 0), IF(B1:B12=I1, D1:D12, 0) )
Cada matriz en la función es proporcionada por IF()
's' que simplemente comparan el rango de búsqueda con la celda de la columna I para la fila (sí, ninguno de los dos enfoques serán SPILL
fórmulas, por lo que debe copiar hasta donde UNIQUE()
se extienda la columna I) y devolver el datos de dos columnas en los parámetros de la función.
Directo, claro y sencillo, fácil de entender y mantener a lo largo de los años. Debería ser rápido ya que utiliza pruebas simples de VERDADERO/FALSO, no funciones. Ninguno de los enfoques utiliza SPILL
funcionalidad en su SUMPRODUCT()
columna, por lo que ninguno de los dos tiene ventajas.
Pero este solo utiliza funciones con las que estás claramente familiarizado, así que ¿por qué no?
Y, de hecho, la parte desagradable, hacer una lista de los estudiantes únicos, se utiliza SPILL
para que la tarea también funcione bien.