Usando BUSCARV en una fórmula matricial en hojas de cálculo de Google
-
09-06-2019 - |
Pregunta
Efectivamente quiero dar puntuaciones numéricas a las calificaciones alfabéticas y sumarlas.En Excel, poniendo el LOOKUP
la función en una fórmula matricial funciona:
{=SUM(LOOKUP(grades, scoringarray))}
Con el VLOOKUP
función esto no funciona (solo obtiene la puntuación del primer grado).Google Spreadsheets no parece tener la LOOKUP
función y VLOOKUP
falla de la misma manera usando:
=SUM(ARRAYFORMULA(VLOOKUP(grades, scoresarray, 2, 0)))
o
=ARRAYFORMULA(SUM(VLOOKUP(grades, scoresarray, 2, 0)))
¿Es posible hacer esto (pero tengo una sintaxis incorrecta)?¿Puede sugerir un método que permita realizar el cálculo en una celda simple como esta en lugar de ocultar las búsquedas en otro lugar y sumarlas después?
Solución 3
Todavía no puedo ver las fórmulas en tu ejemplo (solo valores), pero eso es exactamente lo que estoy tratando de hacer en términos del resultado;Obviamente, ya puedo hacerlo "al lado" y sumar por separado; la clave para mí es hacerlo en una celda.
Lo he vuelto a mirar esta mañana - usando el MATCH
La función para la búsqueda funciona en una fórmula matricial.Pero entonces el INDEX
la función no.También he intentado usarlo con OFFSET
y INDIRECT
sin éxito.Finalmente, el CHOOSE
La función no parece aceptar un rango de celdas como lista para elegir: el rango se degrada a un solo valor (la primera celda del rango).También cabe señalar que el CHOOSE
La función solo acepta 30 valores para elegir (según la documentación).Todo muy molesto.Sin embargo, ahora tengo una solución funcional en una celda:utilizando el CHOOSE
función y enumerar explícitamente las celdas de resultados una por una en los argumentos como este:
=ARRAYFORMULA(SUM(CHOOSE(MATCH(D1:D8,Lookups!$A$1:$A$3,0),
Lookups!$B$1,Lookups!$B$2,Lookups!$B$3)))
Obviamente esto no se extiende muy bien, pero es de esperar que las tablas de búsqueda sean bastante fijas por naturaleza.Para tablas de búsqueda más grandes, es complicado escribir todas las celdas individualmente y algunas personas pueden exceder el límite de 30 celdas.
¡Sin duda agradecería una solución más elegante!
Otros consejos
Me temo que creo que la respuesta es no.Del texto de ayuda enhttp://docs.google.com/support/spreadsheets/bin/answer.py?answer=71291&query=arrayformula&topic=&type=
El verdadero poder de ARRAYFORMULA surge cuando tomas el resultado de uno de esos cálculos y lo envuelves dentro de una fórmula que toma argumentos de matriz o rango:SUMA, MAX, MIN, CONCATENAR,
Como vlookup requiere una sola celda para realizar la búsqueda (en el primer argumento), no creo que pueda hacerlo funcionar sin utilizar un rango separado de búsquedas.
Sé que este hilo es bastante antiguo, pero he estado luchando con el mismo problema durante algún tiempo.Finalmente encontré una solución (bueno, Frankenstuvod una).Es sólo un poco más elegante, pero debería poder trabajar con grandes conjuntos de datos sin problemas.
La solución utiliza lo siguiente:
=ARRAYFORMULA(SUM(INDIRECT(ADDRESS(MATCH(), MATCH())))
como sustituto de la función vlookup.
¡Espero que esto ayude a alguien!
Puedes hacerlo fácilmente de esta manera codificándolo en la tabla VR:
=SUM(IFERROR(ARRAYFORMULA(VLOOKUP(A2:A, {{"A", 6};
{"B", 5};
{"C", 4};
{"D", 3};
{"E", 2};
{"F", 1}}, 2, 0)), ))
o puedes usar algunas celdas laterales con reglas:
=SUM(IFERROR(ARRAYFORMULA(VLOOKUP(A2:A, E2:F, 2, 0)), ))
alternativas: https://webapps.stackexchange.com/a/123741/186471