Estoy intentando configurar una función para reformatear una cadena que posteriormente será concatenada. Una cadena de ejemplo se vería así:
Standard_H2_W1_Launch_123x456_S_40K_AB
Aunque a veces el "S" no'existe, y a veces el "40K" es "60K" o no está, y el "_AB" también puede ser "CD" o "EF". Por último, todos los guiones bajos deben cambiarse por guiones. El producto final debería tener este aspecto:
Standard-H2-W1-Launch-123x456-
Tengo cuatro funciones que si se ejecuta uno tras otro se encargará de todo esto:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_")
=SUBSTITUTE(SUBSTITUTE(B2,"_40K",""),"_60K","")
=SUBSTITUTE(C2,"_S_","_")
=SUBSTITUTE(D2,"_","-")
He intentado varias maneras de combinar estos en una sola función, pero yo soy relativamente nuevo en este nivel de Excel, así que estoy en una pérdida. ¿Hay alguna manera de combinar todo esto para que se ejecute un comando tras otro en una celda?
Para combinarlos de forma sencilla, puedes colocarlos todos juntos así:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_"),"_40K",""),"_60K",""),"_S_","_"),"_","-")
(tenga en cuenta que esto puede pasar el límite más antiguo de Excel de 7 declaraciones anidadas. Estoy probando en Excel 2010
Otra forma de hacerlo es utilizando las funciones Left
y Right
.
Esto supone que los datos que cambian al final están siempre presentes y tienen 8 caracteres de longitud
=SUBSTITUTE(LEFT(A2,LEN(A2)-8),"_","-")
Se obtendrá la misma cadena resultante
Si la cadena no siempre termina con los 8 caracteres que desea eliminar, puede buscar la "_S" y obtener la ubicación actual. Prueba con esto:
=SUBSTITUTE(LEFT(A2,FIND("_S",A2,1)),"_","-")
¡Gracias por la idea de desglosar una fórmula Werner!
Usar Alt+Enter permite poner cada trozo de una fórmula sustitutiva compleja en líneas separadas: son más fáciles de seguir y se alinean automáticamente al pulsar Enter.
Sólo asegúrate de que tienes suficientes sentencias finales para igualar el número de líneas sustituir(
a cada lado de la celda de referencia.
Como en este ejemplo:
=
substitute(
substitute(
substitute(
substitute(
B11
,"(","")
,")","")
,"[","")
,"]","")
se convierte en:
=
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
que funciona bien como está, pero siempre se puede eliminar manualmente los párrafos adicionales:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
Nombre > sustituto()
[Samoa Americana] > Samoa Americana
Yo utilizaría el siguiente enfoque:
=SUBSTITUTE(LEFT(A2,LEN(A2)-X),"_","-")
donde X
denota la longitud de las cosas que usted're no después. Y, para X
I'd uso
(ISERROR(FIND("_S",A2,1))*2)+
(ISERROR(FIND("_40K",A2,1))*4)+
(ISERROR(FIND("_60K",A2,1))*4)+
(ISERROR(FIND("_AB",A2,1))*3)+
(ISERROR(FIND("_CD",A2,1))*3)+
(ISERROR(FIND("_EF",A2,1))*3)
El anterior ISERROR(FIND("X",.,.))*x
devolverá 0 si X
no se encuentra y x
(la longitud de X
) si se encuentra. Así que técnicamente está recortando A2
de la derecha con posibles coincidencias.
La ventaja de este enfoque sobre los otros mencionados es que es más evidente qué sustitución (o eliminación) se está produciendo, ya que la "sustitución" no está anidada.