Soy entrenador de fuerza y acondicionamiento y necesito ayuda para desglosar los resultados de la evaluación de mis atletas. Necesito ayuda para escribir una fórmula que reste el resultado de 5 pruebas más antiguo del más reciente. La hoja tiene casi 3000 filas teniendo cada atleta 5 filas cada uno (semestre 1, 2, 3, 4 y verano), independientemente de su participación real en dicha prueba. Entonces, la fórmula básicamente necesita bajar por la columna y tomar el primer valor disponible de las 5 celdas y restarlo del último valor disponible de las 5 celdas. La hoja está configurada como tal:
¡Por favor ayuda! Lo siento si esto no proporciona suficiente información, soy nuevo en el sitio.
Respuesta1
Tengo una fórmula que funciona cuando la pones en cualquiera de esas filas grises tituladas CAMBIAR
Es una maravilla, se ve así:
=INDEX(Values, SMALL(INDEX((Values<>0)*ROW(Values), 0), ROWS(Values)) - ROW(StartValue) + 1,1)- INDEX(Values, SMALL(INDEX((Values<>0)*ROW(Values), 0), COUNTIF(Values, "")+1) - ROW(StartValue)+1,1)
Dónde
Values
es el rango de valores, en mi ejemplo esto esH5:H9
StartValue
es la primera celda en el rango de valores, para mí esto esH5
Cómo funciona
- La declaración
INDEX((Values<>0)*ROW(Values), 0)
devuelve una matriz que es0
cuando la celda está en blanco y el número de fila de la celda cuando no está en blanco. - La
SMALL()
función los ordena en orden ascendente y luego devuelve el valor en la matriz correspondiente a su segundo argumento.
Entonces, en la hoja de cálculo de ejemplo a continuación, INDEX((Values<>0)*ROW(Values), 0)
devuelve
0
6
7
8
0
SMALL()
lo ordena para que se vea así:
0
0
6 <- Row of first nonzero value, second argument to SMALL(): =COUNTIF(Values, "")+1 = 3
7
8 <- Row of last nonzero value, second argument to SMALL(): ROWS(Values) = 5
- Ahora que conocemos la fila, usamos
INDEX()
para obtener el valor. La línea- ROW(StartValue) + 1
traduce la fila devuelta porSMALL()
en un índice. - Entonces nos queda el valor distinto de cero más reciente de la primera llamada a
INDEX()
y le restamos el valor distinto de cero más distante de la segunda llamada aINDEX()
Captura de pantalla
Enlace a la hoja de cálculo
AquíHay un enlace para descargar esta hoja de cálculo de muestra. Normalmente uso FormulaChop para explicar estas fórmulas, pero no funciona con la función ROW(). (Divulgación completa: escribí FormulaChop). Así que incluí una versión de la fórmula que funciona y puedes verla desglosada en la pestaña FormulaChop.
Respuesta2
Con las fechas en la columna A (A2:A3001), los nombres en la columna B y los valores en las columnas C, pon el nombre a buscar en F2 y usa esta fórmula en G2.
=SUMIFS(C:C, B:B, F2, A:A, AGGREGATE(14, 7, (A$2:A$3001)/(B$2:B$3001=F2), 1))-
SUMIFS(C:C, B:B, F2, A:A, AGGREGATE(15, 7, (A$2:A$3001)/(B$2:B$3001=F2), 1))
Respuesta3
Respuesta4
Esto puede ser lo que estás buscando Imagen que muestra cómo se ven los resultados.
Así luce la fórmula, es muy sencilla de utilizar Imagen que muestra fórmulas
¿Cómo crear fórmula? Presione Alt+F11 y copie y pegue lo siguiente
Función pública Diff2(n1 como doble, n2 como doble, n3 como doble, n4 como doble, n5 como doble)
índice1 = 0 índice2 = 0
'encontrar el primer número Si n1 > 0 Entonces PrimerNum = n1 índice1 = 1 De lo contrario Si n2 > 0 Entonces PrimerNum = n2 índice1 = 1 De lo contrario Si n3 > 0 Entonces PrimerNum = n3 índice1 = 3 De lo contrario Si n4 > 0 Entonces PrimerNum = n4 índice1 = 4 Fin Si
'encontrar el segundo número Si n5 > 0 Entonces SecNum = n5 índice2 = 5 De lo contrario, Si n4 > 0 Entonces SecNum = n4 índice2 = 4 De lo contrario, Si n3 > 0 Entonces SecNum = n3 índice2 = 3 De lo contrario, Si n2 > 0 Entonces SecNum = n2 índice2 = 2 Fin Si
'Error al comprobar si (índice1 = 0) o (índice2 = 0) o (índice1 - índice2 = 0) Entonces Diff2 = "ERROR" De lo contrario Diff2 = SecNum - FirstNum End If
Función final