Estoy intentando automatizar más completamente el cálculo de valores y datos resumidos en una hoja de cálculo que guardo sobre los resultados de los partidos en una liga de grupo.
Tengo una tabla con mucha información sobre cada partido, con los campos relevantes: Fecha del partido, Ganador, Hándicap inicial del ganador, Hándicap final del ganador, Perdedor, Hándicap inicial del perdedor, Hándicap final del perdedor, Hora de inicio del partido.
Los handicaps se ajustan al final de cada partido y antes del siguiente. Es complicado encontrar el récord anterior más reciente de un jugador (podría haber sido ganador o perdedor) y copiar su hándicap final de ese registro al hándicap inicial (ganador o perdedor) del que estoy ingresando ahora.
Me gustaría una fórmula que encontrara el récord más reciente (fecha y hora de inicio más altas en caso de que jugara dos veces en un día) donde fue ganador o perdedor, y luego obtener el hándicap final (del respectivo ganador o perdedor). ).
Según la sugerencia de Teylyn, aquí hay un enlace de Dropbox al archivo. La pestaña correspondiente es Resultados del partido:https://www.dropbox.com/s/1j9c6zsxjd3q4dt/Sample%20for%20Excel%20Question%20on%20Superuser.xlsx?dl=0
Agregué una columna L en blanco para probar cosas, comparando los resultados con lo que hay en K para ver si estaban funcionando, por eso está ahí. Olvidé eliminarlo cuando lo puse en Dropbox.
Respuesta1
Planteamiento del problema
Una hoja de trabajo tiene nombres en Columnas E
y X
. Para cada filan
, ≠ . Hay números en Column correspondientes a los nombres en Column y números en Column correspondientes a los nombres en Column . Para cualquier fila después de la primera (digamos la fila 42), queremos obtener valores para y de las filas anteriores, si es posible.En
Xn
M
E
AG
X
K42
AF42
- Si
E42
es "John", busque la fila más reciente que contenga "John" (en la columnaE
oX
). llama a esa filan
. Si = “John”, igual a . Si = “John”, igual a .En
K42
Mn
Xn
K42
AGn
Si
X42
es "Scott", busque la fila más reciente que contenga "Scott" (en la columnaE
oX
). llama a esa filan
. Si = “Scott”, igual a . Si = “Scott”, igual a .En
AF42
Mn
Xn
AF42
AGn
Solución
Con la esperanza de preservar algo de cordura, usemos columnas auxiliares; digamos AR
y AS
. Supongamos que (como en el archivo de ejemplo), los datos comienzan en la fila 2. Ingrese
=MAX(($E$2:$E2=$E3)*(100*ROW($E$2:$E2)+COLUMN($M:$M)), ($X$2:$X2=$E3)*(100*ROW($X$2:$X2)+COLUMN($AG:$AG)))
en AR3
(saltar AR2
). Termine con Ctrl+ Shift+ Enter, para convertirla en una fórmula matricial. Asimismo, establezca AS3
en
=MAX(($E$2:$E2=$X3)*(100*ROW($E$2:$E2)+COLUMN($M:$M)), ($X$2:$X2=$X3)*(100*ROW($X$2:$X2)+COLUMN($AG:$AG)))
como una fórmula matricial. (Esto es lo mismo AR3
excepto que las dos apariciones de $E3
han sido reemplazadas por $X3
.)
Ajustado K3
a
=IF($AR3=0, "?", INDEX($A$1:$BG$999, INT($AR3/100), MOD($AR3,100)))
y AF3
para
=IF($AS3=0, "?", INDEX($A$1:$BG$999, INT($AS3/100), MOD($AS3,100)))
(no como fórmulas matriciales). Son iguales excepto que las tres apariciones de $AR3
han sido reemplazadas por $AS3
.
Y, por supuesto, arrastrar/rellenar.
Las columnas auxiliares encuentran las apariciones anteriores más recientes de los nombres ( busca la aparición anterior más reciente de y encuentra la aparición anterior más reciente de ) básicamente encontrando el máximo, en las filas anteriores, deARn
En
ASn
Xn
(valor anterior=este valor) * FILA())
es decir, el número de fila más alto donde el nombre coincide. Luego codifica la ubicación donde se encontró el nombre como
100*FILA() + COLUMNA(datos_que_queremos_copiar)
Ambas fórmulas buscan tanto en Columnas E
como en y devuelven las coordenadas codificadas de las Columnas o celdas X
correspondientes . Luego, las fórmulas y simplemente decodifican la dirección de la celda y recuperan el valor.M
AG
K
AF
También lo AR6
es 213 porque "John" ( E6
) fue visto por última vez en la fila 2 y, dado que fue visto en E2
(en lugar de X2
), queremos copiar el valor de la columna 13 (columna M
).