Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA: Convertir textos a mayúsculas

Estudiaremos en esta ocasión la forma de convertir en mayúsculas los textos de un rango...
Se trata de dar respuesta a la cuestión planteada por un usuario del blog:
[...] Tengo una duda, cómo se podría hacer para que cuando se copie un rango, por ejemplo 5 celdas con letras en minúsculas, y se pegue en la hoja1, todas las celdas pegadas se transformen en mayúsculas. La alternativa que nos presentas aplica solo si se pega una celda o se escribe en una sola celda. [...]


Partiremos del siguiente rango B2:D6 con Textos y números.



Veremos algunas alternativas...
Insertamos el siguiente procedimiento 'Sub' en un módulo estándar:

Sub ConvertirMayusculas()
'a elegir una manera...

'1-forma clásica
'recorremos celda a celda la selección
For Each celda In Selection
' y convertimos con la función UCASE todo en mayúscula
celda.Value = UCase(celda.Value)
Next celda

'2-forma óptima (recomendada)
Dim strSel As String
strSel = Selection.Address
Selection = Evaluate("INDEX(UPPER(" & strSel & "),,)")

'3-forma alternativa sobre rango estático
[B2:D6] = [INDEX(UPPER(B2:D6),,)]
End Sub


OJO!!!, estos métodos convierten todo a valores... por lo que las fórmulas 'desaparecen, convertidas a valores!!!

Para evitar este contratiempo nos obligaremos a emplear el modo bucle (forma clásica), donde con la propiedad .HasFormula discriminaremos las celdas con fórmulas.
Puedes ver un ejemplo similar aquí.


La primera forma emplea la función VBA llamada UCASE que procesa los textos y los convierte en mayúsculas...
Su contraria es LCASE que transforma en minúscula los textos.
El procedimiento se realiza celda a celda...

La segunda y tercera forma (en el fondo es la misma) emplea funciones de la hoja de cálculo:
función INDICE y función MAYUSC para transformar cada celda del rango indicado en la función.
En primer lugar UPPER - MAYUSC convierte en mayúscula los textos, y luego INDEX - INDICE devuelve cada valor a su celda...


Como punto interesante la manera de referirnos a los rangos en el método 3 expuesto
[B2:D6] = [INDEX(UPPER(B2:D6),,)]

que emplea una notación de VBA algo olvidada... con el uso de los corchetes (square brackets).
Estos corchetes en general representan o replican el uso de la función EVALUATE.


This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

VBA: Convertir textos a mayúsculas

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×