Chris tiene una hoja de trabajo que tiene nombres de clientes en las columnas A a F. En la columna G quiere incluir una fórmula que tome todos los nombres de las seis columnas de nombres y los concatenará en una cadena larga, con los caracteres // entre cada nombre . Es posible que no haya nombres en las seis columnas, y no debería haber delimitadores // iniciales o finales extraños.

Concatenar texto en Excel es fácil. Por ejemplo, si tiene algo en la celda A2 y desea concatenarlo con lo que está en la celda B2, puede hacerlo con esta fórmula:

=A2 & B2

Puede incluir los // delimitadores entre los dos valores simplemente agregándolos en el lugar adecuado:

=A2 & "//" & B2

Esto es bastante sencillo. Usando este enfoque, podría concatenar los seis nombres usando la siguiente fórmula:

=A2 & "//" & B2 & "//" & C2 & "//" & D2 & "//" & E2 & "//" & F2

Donde las cosas se complican es cuando reconoce que algunas de esas células pueden no tener nada en ellas. Por lo tanto, la fórmula resultaría en delimitadores // finales o finales, o en delimitadores dobles (////)

en algún lugar en el medio del resultado.

La solución obvia es usar declaraciones IF para verificar el contenido de las celdas de nombre antes de concatenarlas. Sin embargo, esto puede resultar en fórmulas sorprendentemente largas. Por ejemplo, la siguiente fórmula hará correctamente la verificación y la concatenación:

=IF(RIGHT(CONCATENATE(IF(A3="","",CONCATENATE(A3,"//")), IF(B3="","",CONCATENATE(B3,"//")),IF(C3="","",CONCATENATE(C3,"//")), IF(D3="","",CONCATENATE(D3,"//")),IF(E3="","",CONCATENATE(E3,"//")), IF(F3="","",F3)),2)="//",LEFT(CONCATENATE(IF(A3="","", CONCATENATE(A3,"//")),IF(B3="","",CONCATENATE(B3,"//")), IF(C3="","",CONCATENATE(C3,"//")),IF(D3="","",CONCATENATE(D3,"//")), IF(E3="","",CONCATENATE(E3,"//")),IF(F3="","",F3)), LEN(CONCATENATE(IF(A3="","",CONCATENATE(A3,"//")), IF(B3="","",CONCATENATE(B3,"//")),IF(C3="","",CONCATENATE(C3,"//")), IF(D3="","",CONCATENATE(D3,"//")),IF(E3="","",CONCATENATE(E3,"//")), IF(F3="","",F3)))-2),CONCATENATE(IF(A3="","",CONCATENATE(A3,"//")), IF(B3="","",CONCATENATE(B3,"//")),IF(C3="","",CONCATENATE(C3,"//")), IF(D3="","",CONCATENATE(D3,"//")),IF(E3="","",CONCATENATE(E3,"//")), IF(F3="","",F3)))

Sí, esta es una fórmula de una sola línea. (¡Uf!) Esta fórmula utiliza el enfoque de anidar declaraciones IF para lograr el resultado deseado. Esto puede funcionar en esta instancia en particular, pero la fórmula se acerca mucho al límite de Excel de solo permitir que las declaraciones IF se aniden en siete niveles de profundidad.

La solución al problema potencial de niveles anidados es simplemente no anidar las declaraciones IF. En su lugar, puede evaluar cada celda individualmente y concatenar lo que se devuelva.

=MID(IF(ISTEXT(A3),"//"&A3,"") & IF(ISTEXT(B3),"//"&B3,"")

& IF(ISTEXT(C3),"//"&C3,"") & IF(ISTEXT(D3),"//"&D3,"") & IF(ISTEXT(E3),"//"&E3,"") & IF(ISTEXT(F3),"//"&F3,""),3,2000)

Tenga en cuenta que esta fórmula es mucho más corta. Puede ver mejor lo que está haciendo si observa la fórmula «dividida» en varias líneas:

=MID( IF(ISTEXT(A3),"//"&A3,"") & IF(ISTEXT(B3),"//"&B3,"") & IF(ISTEXT(C3),"//"&C3,"") & IF(ISTEXT(D3),"//"&D3,"") & IF(ISTEXT(E3),"//"&E3,"") & IF(ISTEXT(F3),"//"&F3,""),3,2000)

Cada instrucción IF individual en la fórmula evalúa una celda de nombre y no devuelve nada («») si la celda no contiene texto, o devuelve el delimitador (//) seguido del nombre. Luego, la fórmula completa se incluye dentro de la declaración MID, que efectivamente corta el primer // delimitador de la cadena.

Esta fórmula se puede acortar aún más si, en lugar de usar la función ISTEXT para evaluar las celdas, simplemente hace una comparación booleana para averiguar si hay algún texto en la celda, de la siguiente manera:

=MID(IF(A3>"","//"&A3,"") & IF(B3>"","//"&B3,"") & IF(C3>"","//"& C3,"") & IF(D3>"","//"&D3,"") & IF(E3>"","//"&E3,"") & IF(F3>"","//"&F3,""),3,2000)

Esta es exactamente la misma técnica, solo que un poco más corta. (Y bastante más corto de la fórmula original.)

Esta fórmula funcionará muy bien, siempre que los valores en las celdas de nombre sean texto. Si las columnas de su nombre tienen valores numéricos en ellas por alguna razón, puede modificar fácilmente la fórmula para usar ISBLANK en lugar de ISTEXT, como se muestra aquí:

=MID(IF(ISBLANK(A3),"","//"&A3) & IF(ISBLANK(B3),"","//"&B3)

& IF(ISBLANK(C3),"","//"& C3) & IF(ISBLANK(D3),"","//"&D3)

& IF(ISBLANK(E3),"","//"&E3) & IF(ISBLANK(F3),"","//"&F3),3,2000)

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (2173) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.