Asumiré que su pantalla muestra la salida para A6
en E5
(porque la salida para A5
es "ninguno") es un error, y realmente quieres la salida para A6
en E6
.
Me parece poco natural tener las palabras clave en una columna. La salida para A_i_
está en E_i_
, y el valor en C_i_
no tiene realmente nada que ver con las otras cosas de Row i
. Es más bien una m × n situación, en la que tienes m celdas (párrafos) de texto para buscar, y n palabras clave para buscar. Pues bien, tenemos formas de solucionarlo.
Mi solución utiliza n +1 columnas de ayuda. Desde n aquí es 5, eso significa 6 columnas de ayuda, que podrían ser Columnas F
a través de K
. (Como es habitual con las columnas de ayuda, puede ponerlas donde quiera - puede ponerlas en Columnas AA
a través de AF
si quieres - y puedes ocultarlos).
La primera ( F
) se deja en blanco. Introduzca
=OFFSET($C$1, COLUMN()-COLUMN($F:$F), 0)
en la célula G1
y arrastrar/rellenar hacia la derecha, para K1
. Esto utiliza el número de columna actual (relativo al inicio del bloque de columnas de ayuda) como índice en la columna C
las palabras clave, replicando así las palabras clave de la fila 1 (celdas G1
a través de K1
).
A continuación, introduzca
=F2 & IF(ISNUMBER(SEARCH(G$1, $A2)), ", " & G$1, "")
en la célula G2
. Arrastrar/rellenar a la derecha, a la celda K2
, y luego hacia abajo para cubrir el m filas que tienen datos en la columna A
. Esto busca el párrafo en la Columna A
de la fila actual para la i que se encuentra en la fila 1 de la columna actual. Si la encuentra (es decir, si SEARCH(…)
devuelve un número; es decir, si ISNUMBER(SEARCH(…))
es verdadero), genera la palabra clave, precedida por una coma y un espacio. Si no encuentra la palabra clave el IF(…)
evalúa a una cadena nula. (Si desea una comparación que distinga entre mayúsculas y minúsculas, sustituya SEARCH
con FIND
.) Entonces, de cualquier manera el resultado se concatena con el valor de la celda de la izquierda. Esto da como resultado, en la columna K
, una lista separada por comas de las palabras clave que están presentes en el párrafo de la columna A
de la fila actual.
A continuación, introduzca
=IF(K2="", "", RIGHT(K2, LEN(K2)-2))
en E2
y arrastrar/rellenar hacia abajo para cubrir las filas que tienen datos en la Columna A
. Esto dice que si el valor de la columna K
es null, entonces se evalúa a null, de lo contrario, elimine el ,
desde el principio del valor en la columna K
.
Aquí hay una imagen del resultado que obtuve para sus datos de entrada:
(Haga clic para ampliar la imagen).
Nota en la celda E6
(la salida para A6
) que mi solución enumera las palabras clave coincidentes en el orden en que aparecen en la columna C
, mientras que su ilustración los enumera en el orden en que aparecen en la celda A6
. Si eso es un problema, edita tu pregunta para decirlo y veré si puedo arreglarlo.
0 votos
En serio, ¿quieres la salida para
A6
enE5
(porque la salida paraA5
es "ninguno")?1 votos
@G-Man sí, lo siento si no quedó claro.
0 votos
Tengo una solución de fórmula pura utilizando
TEXTJOIN
pero sin eliminar los resultados vacíos, lo que significa queE5
vacío y la salida paraA6
en E6. Más tarde, puedes eliminar manualmente (o mediante un simple script) esos resultados vacíos. Dime si te interesa.1 votos
@A.S.H por supuesto que me interesa :) Luego puedo eliminar los valores vacíos sí. Pero eso era sólo un ejemplo, por desgracia, con mis datos no puedo concatenar cada palabra clave en una sola celda utilizando TEXTJOIN (tengo 700K palabras clave ).
0 votos
Sí, es difícil saber a priori si funcionará en tu conjunto de datos, pero publicaré una fórmula que funcione en un conjunto de pruebas razonable para que puedas comprobarlo.
1 votos
TEXTJOIN
sería una buena solución aquí como=TEXTJOIN(",",TRUE,IFERROR(IF(SEARCH($C$2:$C$20,A2),$C$2:$C$20),""))
para E2, sin embargo: sabiendo que hay una base de datos ENORME con la que ir, el límite de 32767 caracteres puede ser un problema... además ir por arrays tan grandes puede acabar congelando el excel. No creo que haya una buena solución sin VBA :/