Traté de expresar el título lo mejor que pude y haré todo lo posible para explicarlo. Tomaré cualquier sugerencia para cambiar el nombre del título, si es necesario.
Tengo dos hojas que estoy tratando de usar para rastrear rondas jugadas por jugadores en un deporte. Son esencialmente los mismos datos, simplemente presentados de manera diferente.
En una hoja, tengo 12 filas, cada fila representa un jugador, con el nombre del jugador en la Columna B.
Para cada fila, hay 11 columnas, cada una representando cada ronda de un juego.
p.ej,
================================================
| A | B | C | ... | M |
================================================
| No. | Player | Round 1 | ... | Round 11 |
------------------------------------------------
| 1 | Male 1 | I | | I |
| 2 | Male 2 | I | | I |
| 3 | Male 3 | I | I | |
| 4 | Male 4 | I | I | |
| 5 | Male 5 | I | I | I |
| 6 | Male 6 | | I | I |
| 7 | Male 7 | | I | I |
| 8 | Female1 | I | | |
| 9 | Female2 | I | I | |
| 10 | Female3 | I | I | I |
| 11 | Female4 | | I | I |
| 12 | Female5 | | | I |
Solo 5 jugadores masculinos pueden jugar en una ronda. Sólo 3 hembras jugadores pueden jugar en una ronda.
Entonces, si el jugador está adentro, ingreso una "I" en la columna de la ronda correspondiente, y se vacía si no está jugando esa ronda.
En la otra hoja, tengo filas que representan a los jugadores que están "IN" y los jugadores que están "OUT". Luego tengo columnas que representan la ronda del juego.
Sin embargo, en estas celdas actualmente estoy ingresando manualmente (copiar / pegar) los nombres de los jugadores que entran y / o salen para esa ronda.
================================================
| A | B | C | ... | M |
================================================
| No. | Status | Round 1 | Round 2 | Round 3 |
|-----------------------------------------------
| 1 | IN | Male 1 | Male 3 | Male 1 |
| 2 | IN | Male 2 | Male 4 | Male 2 |
| 3 | IN | Male 3 | Male 5 | Male 6 |
| 4 | IN | Male 4 | Male 6 | Male 7 |
| 5 | IN | Male 5 | Male 7 | Male 7 |
| 6 | IN | Female1 | Female2 | Female3 |
| 7 | IN | Female2 | Female3 | Female4 |
| 8 | IN | Female3 | Female4 | Female5 |
| 9 | OUT | Male 6 | Male 1 | Male 3 |
| 10 | OUT | Male 7 | Male 2 | Male 4 |
| 11 | OUT | Female4 | Female1 | Female1 |
| 12 | OUT | Female5 | Female5 | Female2 |
¿Cómo puedo rellenar automáticamente los nombres de los jugadores para las columnas de la segunda hoja en función de la fila y el estado de la primera hoja?
EDITAR:
Actualicé mi pregunta para proporcionar detalles más precisos sobre los datos que estoy usando.
EDITAR:
Se agregaron nombres de columna a los ejemplos.
Respuestas:
Pude hacerlo con dos "matrices auxiliares". Una "celda auxiliar" es una celda que deriva / calcula algún valor intermedio de los datos de entrada. Este valor intermedio se usa luego en otra (s) celda (s) para producir el resultado deseado. Es común tener una "columna auxiliar" en una hoja de datos tabulares. Espero ver si alguien puede simplificar mi respuesta y hacerlo más elegante, pero esto es lo mejor que se me ocurrió en 59 minutos.
Es posible poner ayudantes en la misma hoja que los datos reales, en diferentes columnas o filas, generalmente ocultas. O puede ponerlos en hojas separadas. Como esta respuesta requiere dos de ellos, ilustraré ambas técnicas; A continuación, puede optar por utilizar una técnica de manera consistente.
Asumiré que sus datos de origen (presentados en su pregunta) están en
Sheet1!A2:D8
, con los encabezados en la Fila 1. Coloquedentro de la celda
AB2
, y arrastre / llene hacia abajoAB8
y hacia la derecha a ColumnaAD
. Esto resulta enConfío en que no es necesaria una explicación.
Ahora se vuelve más complicado. Cree
Sheet3
e ingrese las siguientes fórmulas:B2
→=MATCH("I", Sheet1!AB$2:AB$8, 0)
B3
→=MATCH("I", OFFSET(Sheet1!AB$2,B2,0):Sheet1!AB$8, 0) + B2
B7
→=MATCH("blank", Sheet1!AB$2:AB$8, 0)
B8
→=MATCH("blank", OFFSET(Sheet1!AB$2,B7,0):Sheet1!AB$8, 0) + B7
Arrastre / llene la celda
B3
hacia abajoB6
. Si alguna vez cambia su esquema para tener más de dos jugadores "a la vez" a la vez, deberá arrastrar / llenar la celdaB8
hacia abajo adecuadamente. Y, como antes, arrastre / llene la columnaB
a la derecha de la columnaD
. Deberías obtener:Explicación:
B2
contiene la ubicación (relativa) del primeroI
en el rangoSheet1!AB$2:AB$8
. Esto es1
, porqueSheet1!AB2
contieneI
, y es la primera celda en ese rango. Del mismo modo,C2
yD2
contienen3
y1
, respectivamente, porqueSheet1!AC4
ySheet1!AD2
(la tercera y primera celda, correspondientes a Player3 y Player1, respectivamente), son las ubicaciones de la primeraI
en esas columnas.B3
-OFFSET(Sheet1!AB$2,B2,0)
esOFFSET(Sheet1!AB$2,1,0)
, que es equivalente aSheet1!AB3
. Entonces estoMATCH
está mirando el rangoSheet1!AB3:AB8
. EstoMATCH
también regresará1
, porqueSheet1!AB3
contieneI
, y es la primera celda en ese rango. Luego agregamosB2
(1
) a eso, obteniendo2
, que es la ubicación del segundoI
enSheet1!AB2:AB8
.MATCH
celda inD4
está mirando el rangoSheet1!AD4:AB8
. EstoMATCH
volverá3
, porqueSheet1!AD6
es la primera celda en ese rango que contieneI
. AgregarD3
(2
) nos da5
, porque esa fila corresponde a Player5.Luego hacemos lo mismo en las filas 7 y 8, solo buscando
blank
.No habría necesitado la
Sheet1!AA:AD
matriz auxiliar, excepto, aparentemente, que no puedes usarMATCH("", …)
para encontrar una celda en blanco.Ahora podemos simplemente costa cuesta abajo y poner
=INDEX(Sheet1!$A$2:$A$8, Sheet3!B2)
enSheet2!B2
.fuente
Este código VBA hará el truco
Abra VBA / Macros con Alt+ F11, haga clic con el botón
ThisWorkbook
derecho e inserte un módulo debajo de él. Pegue el código en el lado derecho.Compruebe que los valores de las variables
first_sheet
ysecond_sheet
coincidir con los nombres de las hojas de cálculo.Cada vez que ejecute esta macro, actualizará la segunda hoja de acuerdo con los valores de la primera hoja.
Para hacerlo aún más automático en Macros, haga doble clic en la primera hoja, en el lado derecho, seleccione Hoja de trabajo y Cambiar .
Haz que se vea así:
Ahora, cada vez que cambia algo en la primera hoja, la segunda se actualiza.
fuente