Hace unos días recibí una consulta en la que me preguntaban las fórmulas que se utilizan para pasar una cadena de texto a mayúscula, minúscula o nombre propio (primera letra en mayúscula y resto minúsculas). Pues bien, las fórmulas que se utilizan son:
=MAYUSC(texto) pasar a mayúsculas
=MINUSC(texto) pasar a minúsculas
=NOMPROPIO(texto) pasar a nombre propio (primera mayúscula, resto minúscula)
Introduciendo cada una de las fórmulas obtenemos el resultado que estamos buscando. Sin embargo, la siguiente consulta fue ¿y se pueden aplicar a una selección?, es decir, ¿aplicar mayúsculas en una rango determinado?. Obviamente, la fórmula funciona en referencia a la celda sobre la que se aplica, no a un rango de celdas, para ello sería necesario realizar una pequeña función o macro diseñada para tal fin.
Pues bien, fruto de dicha conversación, he desarrollado tres macros para realizar esta tarea de forma automática. La macro sobre la que vamos a trabajar es la siguiente:
Sub Mayusc()
'definimos Item como rango (celda)
Dim Item As Range
Set Area = Application.Intersect(Selection, ActiveSheet.UsedRange)
On Error Resume Next
'Por cada celda (item) dentro del rango seleccionado (área)
For Each Item In Area
'Si el contenido de la celda es texto, pasamos texto a mayúsculas
'con la función UCase()
If Application.IsText(Item) Then
Item.Value = UCase(Item)
End If
Next Item
End Sub
Lo que se plantea es un bucle for each, donde por cada item (que haría referencia a cada celda) en el rango seleccionado, si el contenido es texto, entonces lo pasamos a mayúsculas.
Lo mismo haremos cuando se trate de minúsculas, tan solo tendremos que sustituir el UCase por LCase:
Sub Minusc()
'definimos Item como rango (celda)
Dim Item As Range
Set Area = Application.Intersect(Selection, ActiveSheet.UsedRange)
On Error Resume Next
'Por cada celda (item) dentro del rango seleccionado (área)
For Each Item In Area
'Si el contenido de la celda es texto, pasamos texto a minúsculas
'con la función LCase()
If Application.IsText(Item) Then
Item.Value = LCase(Item)
End If
Next Item
End Sub
En el caso de la función NomPropio, debemos echar mano de la función nativa de Excel, que sería esta: Application.WorksheetFunction.Proper(Item), y en la macro la introducimos de la misma forma que los ejemplo anteriores:
Sub NomPropio()
'definimos Item como rango (celda)
Dim Item As Range
Set Area = Application.Intersect(Selection, ActiveSheet.UsedRange)
On Error Resume Next
'Por cada celda (item) dentro del rango seleccionado (area)
For Each Item In Area
'Si el contenido de la celda es texto, pasamos texto a nompropio
'con la función Proper()
If Application.IsText(Item) Then
Item.Value = Application.WorksheetFunction.Proper(Item)
End If
Next Item
End Sub
Como habéis podido ver, en cada una de las macros he introducido un On Error Resume Next, y esto se debe a que la macro, en caso de que seleccionemos una celda vacía arrojará un error. De esta forma y teniendo en cuenta que la macro es muy pequeña y sencilla (no hay posibilidad de otros errores), este tipo de control de error se ajusta perfectamente al código, (ojo, se podría utilizar también On Error GoTo).
En el archivo de ejemplo, os dejo las macros asignadas a tres botones, de forma que para utilizarlo, solo debéis pegar el texto, seleccionarlo y luego pulsar el botón para cambiar.
Y ahora os dejo el archivo con todas las macros, a modo de plantilla para cambiar caracteres, seguro que en alguna ocasión tendréis que hacer uso de ella (o de las macros) 🙂
Descarga el archivo de ejemplo pulsando en: PASAR A MAYUSCÚLAS, MINÚSCULAS Y NOMBRE PROPIO