Agregar espacios delante de letras mayúsculas (Microsoft Excel)
Muhammad tiene una larga lista de nombres de empresas en una hoja de trabajo. El nombre de cada empresa ha eliminado de alguna manera todos los espacios, de modo que (por ejemplo) aparecen como «AstroPhysics» en lugar de «Astro Physics». Muhammad necesita una forma de procesar todos los nombres de las empresas para insertar un solo espacio entre cualquier aparición de una letra mayúscula, excepto la primera letra de la celda. Se pregunta si hay una manera fácil de hacer esto.
Hay algunas formas en las que puede agregar los espacios. Antes de llegar a las inevitables soluciones basadas en macros, es posible que desee examinar los nombres de las empresas. Podría ser que simplemente haya un carácter no impreso entre cada palabra en el nombre, en lugar de un espacio. Puede determinar esto editando la celda, colocando el punto de inserción algunos caracteres antes de una letra mayúscula y luego presionando la flecha derecha varias veces. Debería ver que el punto de inserción se mueve un espacio hacia la derecha después de cada pulsación; si parece «vacilar» donde debería estar el espacio, entonces hay un carácter que no se imprime allí.
En este caso, la mejor solución es realizar una operación de Buscar y reemplazar para reemplazar el carácter no imprimible con un espacio real. (Puede seleccionar el carácter que no se imprime; mantenga presionada la tecla Mayús mientras presiona la flecha derecha sobre el lugar donde cree que está, y cópielo. Luego péguelo en el cuadro Buscar para realizar la búsqueda).
Suponiendo que los datos no tienen caracteres que no se impriman, también puede intentar usar un enfoque que no sea macro. Quizás el enfoque más simple es agregar una columna auxiliar o dos. En la primera, puede ingresar una fórmula para averiguar la posición de la segunda letra mayúscula dentro del nombre de la empresa. Suponiendo que el nombre de la empresa está en la celda A1, la fórmula que sigue debe ingresarse como una fórmula de matriz:
=SMALL(FIND(0,SUBSTITUTE(A1,CHAR(ROW(INDIRECT("65:90"))),0)&0),2)
Si esta fórmula se ingresó en la celda B1, entonces puede usar lo siguiente para insertar el espacio en el nombre de la empresa original:
=LEFT(A1,B1-1)&" " & RIGHT(A1,(LEN(A1)-B1)+1)
Sin embargo, hay un gran inconveniente en este enfoque: se supone que los datos originales siguen un formato muy estricto. Funciona maravillosamente con nombres de empresas que comienzan con mayúscula y que requieren la inserción de un solo espacio. Si el nombre no se ajusta a estos parámetros, no funcionará como se esperaba.
Por supuesto, puede solucionar estos problemas si utiliza una macro para insertar los espacios. El siguiente es un enfoque simple que analiza cada carácter de la celda. Si el carácter es una letra mayúscula, se inserta un espacio antes del carácter. Cuando finaliza la macro, la cadena se vuelve a introducir en la celda.
Function Add_Spaces(ByVal sText As String) As String Dim CharNum As Long Dim FixedText As String Dim CharCode As Long FixedText = Left(sText, 1) For CharNum = 2 To Len(sText) CharCode = Asc(Mid(sText, CharNum, 1)) If CharCode >= 65 And CharCode <= 90 Then FixedText = FixedText & " " & Mid(sText, CharNum, 1) Else FixedText = FixedText & Mid(sText, CharNum, 1) End If Next CharNum Add_Spaces = FixedText End Function
Usar la macro es simple; si el nombre de la empresa está en la celda A1, se utiliza lo siguiente:
=Add_Spaces(A1)
Un enfoque más compacto es confiar en expresiones regulares para ubicar las letras mayúsculas e insertar un espacio, como se muestra a continuación:
Function SplitCaps(str As String) As String Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Global = True .Pattern = "([a-z])([A-Z])" SplitCaps = .Replace(str, "$1 $2") End With End Function
Esta técnica de macro en particular requiere que habilite las expresiones regulares. Haga esto en el Editor VB seleccionando Herramientas | Referencias y luego desplazarse por las referencias disponibles para localizar la opción Expresiones regulares de Microsoft VBScript 5.5. Asegúrese de que la casilla de verificación a la izquierda de la referencia esté seleccionada, luego haga clic en Aceptar. Luego puede utilizar la función SplitCaps desde dentro de Excel de la misma manera que podría usar la función Add_Spaces.
Por supuesto, la idoneidad de cualquier enfoque dependerá, en gran parte, de las características de los datos con los que esté trabajando. Si los nombres originales de su empresa incluyen varias letras mayúsculas secuenciales (como «ABCCorp.»), Terminará con demasiados espacios en su salida, como «ABCCorp». se convierte en «A B C Corp.» en lugar de «ABC Corp.». Además, los caracteres que no son letras pueden causar problemas, de modo que «H&M»
se convierte en «H & M» o permanece como «H&M» (según el enfoque macro que utilice).
En un esfuerzo por superar algunos de estos nombres de compañías extravagantes, puede probar un enfoque macro diferente que verifica si hay varias letras mayúsculas secuenciales y ajusta la salida en consecuencia.
Sub AddSpaces() Dim i As Integer Dim j As Integer Dim PriorCap As Boolean Dim temp As String j = 1 Do While Cells(j, 2) <> "" Cells(j, 3) = "" PriorCap = True For i = 1 To Len(Cells(j, 2)) Select Case Mid(Cells(j, 2), i, 1) Case "A" To "Z", "-" If PriorCap = False Then Cells(j, 3) = Cells(j, 3) & " " & _ Mid(Cells(j, 2), i, 1) Else Cells(j, 3) = Cells(j, 3) & _ Mid(Cells(j, 2), i, 1) End If PriorCap = True Case Else Cells(j, 3) = Cells(j, 3) & _ Mid(Cells(j, 2), i, 1) PriorCap = False End Select Next i j = j + 1 Loop End Sub
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (12810) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.