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).
Array ingrese ( Ctrl+ Shift+ Enter) la siguiente fórmula F2
y 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 A
se 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:A
que 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.