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.