OK, aquí hay una solución que funciona pero que puede causarle daño cerebral al configurarla. Lo construí paso a paso, calculando un conjunto de cosas que luego fueron utilizadas por los siguientes cálculos. Una vez que tuve un modelo de trabajo, trabajé hacia atrás, sustituyendo las fórmulas reales por las referencias de celda para que todas las fórmulas se refirieran solo a sus listas reales y no a cálculos intermedios. Las fórmulas se multiplicaron. De hecho, el primer intento produjo fórmulas que excedieron la capacidad de la celda. Lo dividí en dos tablas, la primera alimentaba a la segunda. Las tablas son muy grandes y se habrían vuelto locos al tratar de obtener todas las referencias de celda que apuntan a los lugares correctos para llenar las fórmulas en dos direcciones a lo largo de las tablas. Así que agregué algunas referencias indirectas para que las fórmulas simplemente se puedan copiar y pegar y funcionarán sin limpieza manual. Desafortunadamente, eso produjo algunas fórmulas bastante grandes.
Explicaré esto como un ejemplo ubicado en lugares específicos en una hoja de cálculo. Si necesita ubicar las piezas en otro lugar, edite todas las referencias de fila y columna en la primera celda y luego copie y pegue para llenar las tablas. Para su propia cordura, configure algunos ejemplos conocidos para que pueda verificar que los primeros dos renglones y columnas de cada tabla funcionen antes de completar todo. Tome un par de aspirinas profilácticas y comenzaremos.
Esto se basa en su Lista A en las columnas A a F con datos que comienzan en la fila 1 (2,000 filas). La lista B está en las columnas H a J con datos que comienzan en la fila 1 (30 filas).
La primera tabla comienza en L1. Esta tabla crea una lista de las posiciones de las entradas de la Lista B en los registros de la Lista A. Por ejemplo:
Position: 1 2 3 4 5 6
So if a List A record contains: 1 3 3 5 7 9
and a List B record contains: 1 3 7
the entry in this table will be: 1 2 5 (stored as a single number: 125)
Si el registro de la Lista B no coincide con el registro de la Lista A, habrá un # N / A en la celda. El diseño de esta tabla es así:
[L] [M] [N] [O]
[1] <=======List B Row========>
[2] List A Row 1 2 3 ...
[3] 1
[4] 2
[5] 3
...
En realidad, debe colocar los números de fila como encabezados de columna en la fila 2 de las columnas M a AP y como etiquetas de fila en la columna L. Esto es lo que usan las fórmulas como punteros. Hay 30 columnas de datos, una para cada fila de entradas de la Lista B, y tendrá 2,000 filas, que representan las entradas en la Lista A, comenzando en la fila 3. Cada celda de la tabla refleja una entrada de la Lista B frente a una entrada de la Lista A . Esta es la fórmula para M3:
=MATCH(INDIRECT("H"&M$2),$A1:$F1,0)&MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
+MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)&MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
+MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)
+MATCH(INDIRECT("J"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)
+MATCH(INDIRECT("I"&M$2),INDIRECT(ADDRESS($L3,MATCH(INDIRECT("H"&M$2),$A1:$F1,0)+1, , )&":$F"&$L3),0)+1, , )&":$F"&$L3),0)
He roto la fórmula aquí para que sea más legible, pero es una sola fórmula. Verifique que lo tenga funcionando en M3 a N4 con algunos datos de muestra y luego copie y pegue para llenar la tabla.
La segunda tabla comienza en AR1. Esta tabla está estructurada de la misma manera:
[AR] [AS] [AT] [AU]
[1] <=======List B Row========>
[2] List A Row 1 2 3 ...
[3] 1
[4] 2
[5] 3
...
Esta tabla funciona de manera similar a la primera: cada celda representa los resultados de un registro de la Lista B frente a un registro de la Lista A. Esta tabla contiene su resto. Entonces, en el ejemplo que di para la primera tabla, el resto sería 359:
So if a List A record contains: 1 3 3 5 7 9
and a List B record contains: 1 3 7
the remainder is: 3 5 9
La fórmula que va en la celda AS3 es:
=IF(ISNA(M3),"",IF(ISERROR(FIND(COLUMN(INDIRECT("a"&$AR3)),M3)),INDIRECT("a"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("b"&$AR3)),M3)),INDIRECT("b"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("c"&$AR3)),M3)),INDIRECT("c"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("d"&$AR3)),M3)),INDIRECT("d"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("e"&$AR3)),M3)),INDIRECT("e"&$AR3),"")&
IF(ISERROR(FIND(COLUMN(INDIRECT("f"&$AR3)),M3)),INDIRECT("f"&$AR3),""))
Cada celda en esta tabla contendrá el resto o un carácter nulo si no hubo coincidencia.
Quería obtener un resumen de los resultados para cada registro de la Lista A. Como cada fila de la tabla representa un registro de la Lista A, el resumen puede ir al final de cada fila de la tabla. Las 30 columnas de la tabla terminan en la columna BV, por lo que los resultados están en la columna BW. La fórmula para BW3 será:
=AS3&IF(ISBLANK(AS3),""," ")&AT3&IF(ISBLANK(AT3),""," ")& ... &BV3&IF(ISBLANK(BV3),""," ")
En lugar de mostrar los 30 términos aquí, esto muestra solo los dos primeros y el último. Sigue el mismo patrón para agregar el resto. Construye la cadena de resultados concatenando los resultados de cada coincidencia. Si hay un valor en una celda, agrega un espacio antes del siguiente valor. Si desea un delimitador diferente, cambie el espacio a otro, como el espacio de coma. Copie esta fórmula en la columna BW para todas las filas.
Probablemente este no sea el lugar más útil para los resultados. Una vez que tenga todo funcionando, puede mover las cosas. En realidad, si mueve algo, puede tener una limpieza masiva de las referencias de celda. Tendría más sentido crear la salida que desea en otra ubicación y usar referencias de celda para referirse a lo que ya está configurado.