Saltar al contenido

Convierta un rango completo a mayúsculas sin recorrer todas las celdas

No dejes de compartir nuestro espacio y códigos en tus redes sociales, necesitamos tu ayuda para aumentar nuestra comunidad.

Solución:

¿Hay algún método que pueda usar para convertir todo el rango en una sola línea?

Sí, puedes convertir sin bucles. Prueba esto

Sub Sample()
    [A1:A20] = [INDEX(UPPER(A1:A20),)]
End Sub

Alternativamente, usando un rango variable, intente esto:

Sub Sample()
    dim rng as Range
    dim sAddr as string

    set rng = Range("A1:A20")
    sAddr = rng.Address

    rng = Evaluate("index(upper(" & sAddr & "),)")

End Sub

Según tu ejemplo

W.Range("A1:A20") = [index(upper(A1:A20),)]

Explicación

Hay dos partes para [A1:A20] = [INDEX(UPPER(A1:A20),)]

PARTE 1

Como se muestra arriba, [A1:A20] no es más que una forma corta de escribir Range("A1:A20")

PARTE 2

[INDEX(UPPER(A1:A20),)]

Index y Upper son funciones de hoja de cálculo. Entonces puedes usar Application.Worksheetfunction.Index() pero como no tenemos un equivalente de UPPER me gusta Application.Worksheetfunction.UPPER()solo podemos escribirlo como [cell] = [UPPER(cell)]

Ahora con esa línea estamos instruyendo VBA devolver un array y aquí es donde INDEX entra en juego. (Como sabemos, hay dos formas de INDEX función: la array formulario y el formulario de referencia.) Al no especificar una fila o una columna de la arraysimplemente le hacemos saber a Excel que queremos todo array. (Mencionado en la ayuda de VBA también) Así que básicamente lo que estamos haciendo es convertir cada celda en [A1:A20] en mayúsculas

No puedes hacerlo en una línea así, pero puedes hacerlo para un rango dado como:

Sub Test()
    Dim Rng As Range
    Dim c As Range

    Set Rng = ActiveSheet.Range("A1:A20")
    For Each c In Rng
        c.Value = UCase(c.Value)
    Next c
End Sub

Lo cual es bastante simple e intuitivo.

de lo que recopilé de varias fuentes:

Function UcaseRangeAsArray(TargetRng As Range) As Variant()
Dim Arr()    
Arr = Evaluate("INDEX(UPPER(" & TargetRng.Address(External:=True) & "),)")    
UcaseRangeAsArray = Arr
Erase Arr
End Function

Si aceptas, tienes el poder dejar una reseña acerca de qué le añadirías a este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *