Buscar múltiples valores en una tabla diferente dada una celda que contiene múltiples valores delimitados

1

Tengo dos tablas, que se ven así:

ingrese la descripción de la imagen aquí

Me gustaría que Excel use el valor en la ID company associatedtabla 2 (verde), búsquelo en la tabla 1 (naranja) y devuelva el valor de Company name, o valores múltiples cuando varias compañías están asociadas con la misma persona en la tabla 2.

¿Cuál sería la mejor solución?

Lucio
fuente

Respuestas:

5

Aquí hay una fórmula que funcionará en Excel 2016, tal como está. En versiones anteriores de Excel, TEXTJOIN()se requiere un UDF de poli-relleno para . (Vea esta publicación para una básica).


Captura de pantalla de la hoja de trabajo

Array ingrese ( Ctrl+ Shift+ Enter) la siguiente fórmula F2y copie, pegue / rellene en el resto de la columna:

{=TEXTJOIN(";",TRUE,INDEX(B:B,N(IF(1,MATCH(--MID(SUBSTITUTE(E2,";",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))-1)*99+((ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1)))=1),99),A:A,0)))))}

Tenga en cuenta que esta fórmula solo funciona si los valores en la columna Ase almacenan realmente como números. Para valores de texto, el --MID(…)en la fórmula necesita ser reemplazado por TRIM(MID(…)).


La fórmula prettificada es la siguiente:

{=
  TEXTJOIN(
  ";",
  TRUE,
  INDEX(
    (B:B),
    N(IF(1,
      MATCH(
        --MID(
          SUBSTITUTE(E2,";",REPT(" ",99)),
          99*(ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))-1)
          +(1=ROW(OFFSET($A$1,,,LEN(E2)-LEN(SUBSTITUTE(E2,";",""))+1))),
          99
        ),
        (A:A),
        0
      )
    ))
  )
)}

Notas:

  • La fórmula prettificada realmente funciona si se ingresa.
  • Los corchetes (A:A)en la versión prettified son necesarios para forzar A:Aque permanezca en su propia línea. Lo mismo se aplica para el (B:B).


Para Excel 2016 (solo Windows), la siguiente fórmula más simple debería funcionar:

{=TEXTJOIN(";",TRUE,INDEX(B:B,N(IF(1,MATCH(--FILTERXML("<a><b>" & SUBSTITUTE(E2, ";", "</b><b>") & "</b></a>", "//b"),A:A,0)))))}

Al igual que la fórmula anterior, esta también solo funciona en valores almacenados como números. Para valores de texto, simplemente elimine el --de la fórmula.

robinCTS
fuente
Hola RobinCTS, gracias por la respuesta proporcionada, funciona tremendamente. Una última pregunta relacionada con lo anterior: ¿cómo tengo la fórmula para agregar un separador entre nombres, digamos un punto y coma entre el nombre de la empresa? Muy apreciado.
Lucio
@ Lucio Umm, ya lo hace. Para eso es lo primero ;de la fórmula. También puede cambiarlo a cualquier otra cadena de separación. PD: Si realmente aprecias mi ayuda, una vez que alcances más de 15 reputación, no olvides volver y votar mi respuesta también ;-)
robinCTS
A primera vista, parece que solo obtengo 1 valor por cada celda en la columna F (1 nombre de la compañía por celda en la columna F). Esperaba al menos algunas celdas con múltiples valores separados por punto y coma. Es posible, pero muy poco probable dado el conjunto de datos con el que estoy trabajando. Investigaré a fondo el archivo y nos pondremos en contacto con usted. PD: lo haré.
Lucio
@Lucio Debe ingresar la fórmula en matriz usando Ctrl+ Shift+ Enter, en lugar de solo Enter. (Es por eso que las llaves están ahí, para recordarle que lo haga ;-)) PD: No es la causa de su problema, pero para referencia futura he agregado información a la respuesta sobre números almacenados como texto versus números almacenados como reales Números PPS También he simplificado ligeramente la primera fórmula no prettificada. (La versión prettified ya era la versión más simple.)
robinCTS
Trabajado 100%. Gracias por la aclaración.
Lucio