Rangos y celdas de Excel VBA

Rangos y celdas en VBA

Las hojas de cálculo de Excel almacenan datos en celdas. Las celdas se organizan en filas y columnas. Cada celda se puede identificar por el punto de intersección de su fila y columna (Ej. B3 o R3C2).

Un rango de Excel se refiere a una o más celdas (por ejemplo, A3: B4)

Dirección de celda

Notación A1

En la notación A1, se hace referencia a una celda por la letra de la columna (de la A a la XFD) seguida de su número de fila (de 1 a 1.048.576).

En VBA puede hacer referencia a cualquier celda usando el Objeto de rango.

123456789 'Consulte la celda B4 en la hoja actualmente activaRango de MsgBox ("B4")'Consulte la celda B4 en la hoja denominada' Datos 'MsgBox Worksheets ("Datos"). Rango ("B4")'Consulte la celda B4 en la hoja llamada' Datos 'en otro libro ABIERTO'llamado' Mis datos 'MsgBox Workbooks ("Mis datos"). Hojas de trabajo ("Datos"). Rango ("B4")

Notación R1C1

En la notación R1C1, una celda se denomina R seguida del número de fila, luego la letra "C" seguida del número de columna. Por ejemplo, B4 en la notación R1C1 será referido por R4C2. En VBA usas el Objeto de celdas para usar la notación R1C1:

12 'Consulte la celda R [6] C [4], es decir, D6Celdas (6, 4) = "D6"

Rango de celdas

Notación A1

Para hacer referencia a más de una celda, utilice un “:” entre la dirección de la celda inicial y la dirección de la última celda. Lo siguiente se referirá a todas las celdas de A1 a D10:

1 Rango ("A1: D10")

Notación R1C1

Para hacer referencia a más de una celda, use un "," entre la dirección de la celda inicial y la dirección de la última celda. Lo siguiente se referirá a todas las celdas de A1 a D10:

1 Rango (celdas (1, 1), celdas (10, 4))

Escribir en celdas

Para escribir valores en una celda o grupo contiguo de celdas, simplemente consulte el rango, coloque un signo = y luego escriba el valor que se almacenará:

12345678910 'Almacene F5 en la celda con la dirección F6Rango ("F6") = "F6"'Almacene E6 en la celda con la dirección R [6] C [5], es decir, E6Celdas (6, 5) = "E6"'Almacenar A1: D10 en el rango A1: D10Rango ("A1: D10") = "A1: D10"' oRango (celdas (1, 1), celdas (10, 4)) = "A1: D10"

Lectura de celdas

Para leer los valores de las celdas, simplemente consulte la variable para almacenar los valores, coloque un signo = y luego consulte el rango a leer:

1234567891011 Dim val1Dim val2'Leer de la celda F6val1 = Rango ("F6")'Leer de la celda E6val2 = Celdas (6, 5)MsgBox val1Msgbox val2

Nota: para almacenar valores de un rango de celdas, debe usar una matriz en lugar de una variable simple.

Células no contiguas

Para hacer referencia a celdas no contiguas, use una coma entre las direcciones de celda:

123456 'Almacene 10 en las celdas A1, A3 y A5Rango ("A1, A3, A5") = 10'Almacene 10 en las celdas A1: A3 y D1: D3)Rango ("A1: A3, D1: D3") = 10

Intersección de celdas

Para hacer referencia a celdas no contiguas, use un espacio entre las direcciones de celda:

123 'Almacenar' Col D 'en D1: D10'que es común entre A1: D10 y D1: F10Rango ("A1: D10 D1: G10") = "Col D"

Desplazamiento desde una celda o rango

Con la función de compensación, puede mover la referencia de un rango determinado (celda o grupo de celdas) por el número_de_fileras especificado y el número_de_columnas.

Sintaxis de compensación

Rango.Desplazamiento (número_de_fileras, número_de_columnas)

Desplazamiento de una celda

12345678910111213141516 'DESPLAZAMIENTO de una celda A1'Referirse a la propia celda'Mover 0 filas y 0 columnasRango ("A1"). Desplazamiento (0, 0) = "A1"'Mover 1 filas y 0 columnasRango ("A1"). Desplazamiento (1, 0) = "A2"'Mover 0 filas y 1 columnasRango ("A1"). Desplazamiento (0, 1) = "B1"'Mover 1 filas y 1 columnasRango ("A1"). Desplazamiento (1, 1) = "B2"'Mueve 10 filas y 5 columnasRango ("A1"). Desplazamiento (10, 5) = "F11"

Desplazamiento de un rango

123 'Mover la referencia al rango A1: D4 en 4 filas y 4 columnasLa nueva referencia es E5: H8Rango ("A1: D4"). Desplazamiento (4,4) = "E5: H8"

Establecer referencia a un rango

Para asignar un rango a una variable de rango: declare una variable de tipo Rango y luego use el comando Establecer para establecerlo en un rango. Tenga en cuenta que debe utilizar el comando SET ya que RANGE es un objeto:

12345678 'Declarar una variable de rangoAtenuar myRange como rango'Establezca la variable en el rango A1: D4Establecer myRange = Range ("A1: D4")'Imprime $ A $ 1: $ D $ 4MsgBox myRange.Address

Cambiar el tamaño de un rango

El método de cambio de tamaño del objeto Rango cambia la dimensión del rango de referencia:

1234567 Atenuar myRange como rango'Rango para cambiar el tamañoEstablecer myRange = Range ("A1: F4")'Imprime $ A $ 1: $ E $ 10Debug.Print myRange.Resize (10, 5) .Address

La celda superior izquierda del rango redimensionado es la misma que la celda superior izquierda del rango original

Cambiar el tamaño de la sintaxis

Range.Resize (número_de_fileras, número_de_columnas)

OFFSET vs Redimensionar

El desplazamiento no cambia las dimensiones del rango, sino que lo mueve el número especificado de filas y columnas. Redimensionar no cambia la posición del rango original, pero cambia las dimensiones al número especificado de filas y columnas.

Todas las celdas de la hoja

El objeto Cells se refiere a todas las celdas de la hoja (1048576 filas y 16384 columnas).

12 'Borrar todas las celdas en hojas de trabajoCells.Clear

Rango usado

La propiedad UsedRange le proporciona el rango rectangular desde la celda usada de la celda superior izquierda hasta la celda usada inferior derecha de la hoja activa.

1234567 Dim ws como hoja de trabajoEstablecer ws = ActiveSheet'$ B $ 2: $ L $ 14 si L2 es la primera celda con cualquier valor'y L14 es la última celda con cualquier valor en el' hoja activaDebug.Print ws.UsedRange.Address

Región actual

La propiedad CurrentRegion le proporciona el rango rectangular contiguo desde la celda superior izquierda hasta la celda utilizada inferior derecha que contiene la celda / rango referenciado.

1234567891011 Atenuar myRange como rangoEstablecer myRange = Range ("D4: F6")'Imprime $ B $ 2: $ L $ 14'Si hay una ruta llena de D4: F16 a B2 Y L14Debug.Print myRange.CurrentRegion.Address'También puede referirse a una sola celda inicialSet myRange = Range ("D4") 'Imprime $ B $ 2: $ L $ 14

Propiedades de rango

Puede obtener la dirección, el número de fila / columna de una celda y el número de filas / columnas en un rango como se indica a continuación:

123456789101112131415161718192021 Atenuar myRange como rangoEstablecer myRange = Range ("A1: F10")'Imprime $ A $ 1: $ F $ 10Debug.Print myRange.AddressEstablecer myRange = Range ("F10")'Imprime 10 para la Fila 10Debug.Print myRange.Row'Imprime 6 para la columna FDebug.Print myRange.ColumnEstablecer myRange = Range ("E1: F5")'Imprime 5 para el número de filas en el rangoDebug.Print myRange.Rows.Count'Imprime 2 para el número de columnas en el rangoDebug.Print myRange.Columns.Count

Última celda de la hoja

Puedes usar Filas Cuenta y Columnas Cuenta propiedades con Células objeto para obtener la última celda de la hoja:

1234567891011 'Imprime el último número de fila'Imprime 1048576Debug.Print "Filas en la hoja:" & Rows.Count'Imprime el último número de columna'Imprime 16384Debug.Print "Columnas en la hoja:" & Columns.Count'Imprime la dirección de la última celda'Impresiones $ XFD $ 1048576Debug.Print "Dirección de la última celda en la hoja:" & Celdas (Rows.Count, Columns.Count)

Último número de fila utilizado en una columna

La propiedad END le lleva a la última celda del rango, y End (xlUp) le lleva hasta la primera celda utilizada de esa celda.

123 Dim lastRow tan largolastRow = Celdas (Rows.Count, "A"). End (xlUp) .Row

Último número de columna utilizado en una fila

123 Dim lastCol As LonglastCol = Celdas (1, Columns.Count) .End (xlToLeft) .Column

La propiedad END lo lleva a la última celda del rango, y End (xlToLeft) lo lleva a la izquierda a la primera celda utilizada de esa celda.

También puede usar las propiedades xlDown y xlToRight para navegar a las primeras celdas usadas inferior o derecha de la celda actual.

Propiedades de la celda

Propiedades Comunes

Aquí hay un código para mostrar las propiedades de celda de uso común

12345678910111213141516171819202122 Atenuar celda como rangoEstablecer celda = Rango ("A1")Cell.ActivateDebug.Print celda.Address'Imprimir $ A $ 1Debug.Print cell.Value'Grabados 456' DirecciónDepurar Imprimir celda Fórmula'Impresiones = SUMA (C2: C3)ComentarioDebug.Print celda.Comment.Text' EstiloDebug.Print cell.Style'Formato de celdaDebug.Print celda.DisplayFormat.NumberFormat

Fuente de celda

El objeto Cell.Font contiene propiedades de Cell Font:

1234567891011121314151617181920 Atenuar celda como rangoEstablecer celda = Rango ("A1")'Regular, cursiva, negrita y negrita cursivacell.Font.FontStyle = "Negrita cursiva"' Igual quecell.Font.Bold = Verdaderocell.Font.Italic = True'Establecer fuente en Couriercell.Font.FontStyle = "Mensajero"'Establecer color de fuentecell.Font.Color = vbBlue' ocell.Font.Color = RGB (255, 0, 0)'Establecer tamaño de fuentecell.Font.Size = 20

Copiar y pegar

Pegar todo

Los rangos / celdas se pueden copiar y pegar de una ubicación a otra. El siguiente código copia todas las propiedades del rango de origen en el rango de destino (equivalente a CTRL-C y CTRL-V)

1234567 'Copia simpleRango ("A1: D20"). CopiarHojas de trabajo ("Hoja2"). Rango ("B10"). Pegar'o'Copiar de la hoja actual a la hoja denominada' Hoja2 'Rango ("A1: D20"). Destino de la copia: = Hojas de trabajo ("Hoja2"). Rango ("B10")

Pegado especial

Las propiedades seleccionadas del rango de origen se pueden copiar al destino mediante la opción PASTESPECIAL:

123 'Pegue el rango solo como valoresRango ("A1: D20"). CopiarHojas de trabajo ("Hoja2"). Rango ("B10"). PasteSpecial Paste: = xlPasteValues

Estas son las posibles opciones para la opción Pegar:

12345678910111213 'Pegar tipos especialesxlPasteAllxlPasteAllExceptBordersxlPasteAllMergingConditionalFormatsxlPasteAllUsingSourceThemexlPasteColumnWidthsxlPasteCommentsxlPasteFormatsxlPasteFormulasxlPasteFormulasAndNumberFormatsxlPasteValidationxlPasteValuesxlPasteValuesAndNumberFormats

Contenidos de Autoajuste

El tamaño de las filas y columnas se puede cambiar para adaptarse al contenido usando el siguiente código:

12345 'Cambiar el tamaño de las filas 1 a 5 para adaptarse al contenidoFilas ("1: 5"). Ajuste automático'Cambiar el tamaño de las columnas A a B para que se ajusten al contenidoColumnas ("A: B"). Autoajuste

Más ejemplos de rango

Se recomienda que utilice la Grabadora de macros mientras realiza la acción requerida a través de la GUI. Le ayudará a comprender las distintas opciones disponibles y cómo utilizarlas.

Para cada

Es más fácil recorrer un rango usando Para cada construir como se muestra a continuación:

123 Para cada celda del rango ("A1: B100")'Haz algo con el celularSiguiente celda

En cada iteración del bucle, se asigna una celda del rango a la variable cy las instrucciones del bucle For se ejecutan para esa celda. El bucle sale cuando se procesan todas las celdas.

Clasificar

Sort es un método de objeto Range. Puede ordenar un rango especificando opciones para ordenar en Range.Sort. El siguiente código ordenará las columnas A: C según la clave en la celda C2. El orden de clasificación puede ser xlAscending o xlDescending. Encabezado: = xlYes debe usarse si la primera fila es la fila del encabezado.

12 Columnas ("A: C"). Ordenar clave1: = Rango ("C2"), _order1: = xlAscending, Header: = xlYes

Encontrar

Find también es un método de Range Object. Encuentra la primera celda que tiene contenido que coincide con los criterios de búsqueda y devuelve la celda como un objeto Range. Vuelve Nada si no hay coincidencia.

Usar FindNext método (o FindPrevious) para encontrar la siguiente (anterior) ocurrencia.

El siguiente código cambiará la fuente a "Arial Black" para todas las celdas en el rango que comienzan con "John":

12345 Para cada c dentro del rango ("A1: A100")Si c como "John *", entoncesc.Font.Name = "Arial Black"Terminara siSiguiente c

El siguiente código reemplazará todas las apariciones de "Para probar" por "Aprobado" en el rango especificado:

12345678910 Con rango ("a1: a500")Establecer c = .Find ("Para probar", LookIn: = xlValues)Si no c no es nada entoncesfirstaddress = c.AddressHacerc.Value = "Aprobado"Establecer c = .FindNext (c)Bucle mientras no c no es nada y c. Dirección primera direcciónTerminara siTerminar con

Es importante tener en cuenta que debe especificar un rango para usar FindNext. También debe proporcionar una condición de detención, de lo contrario, el ciclo se ejecutará para siempre. Normalmente, la dirección de la primera celda que se encuentra se almacena en una variable y el bucle se detiene cuando llega a esa celda nuevamente. También debe verificar el caso cuando no se encuentra nada para detener el bucle.

Dirección de rango

Utilice Range.Address para obtener la dirección en estilo A1

123 Rango de MsgBox ("A1: D10"). Dirección' oDebug.Print Range ("A1: D10"). Dirección

Use xlReferenceStyle (el predeterminado es xlA1) para obtener direcciones en estilo R1C1

123 MsgBox Range ("A1: D10"). Dirección (ReferenceStyle: = xlR1C1)' oDebug.Print Range ("A1: D10"). Dirección (ReferenceStyle: = xlR1C1)

Esto es útil cuando se trata de rangos almacenados en variables y desea procesar solo para ciertas direcciones.

Rango a matriz

Es más rápido y más fácil transferir un rango a una matriz y luego procesar los valores. Debe declarar la matriz como Variante para evitar calcular el tamaño requerido para completar el rango en la matriz. Las dimensiones de la matriz están configuradas para coincidir con el número de valores en el rango.

123456789 Dim DirArray como variante'Almacene los valores en el rango a la matrizDirArray = Rango ("a1: a5"). Valor'Bucle para procesar los valoresPara cada c en DirArrayDebug.Print cpróximo

Matriz a rango

Después del procesamiento, puede volver a escribir la matriz en un rango. Para escribir la matriz en el ejemplo anterior en un rango, debe especificar un rango cuyo tamaño coincida con el número de elementos en la matriz.

Utilice el siguiente código para escribir la matriz en el rango D1: D5:

123 Rango ("D1: D5"). Valor = DirArrayRango ("D1: H1"). Valor = Aplicación.Transponer (DirArray)

Tenga en cuenta que debe transponer la matriz si la escribe en una fila.

Rango suma

12 SumOfRange = Application.WorksheetFunction.Sum (Range ("A1: A10"))Debug.Print SumOfRange

Puede usar muchas funciones disponibles en Excel en su código VBA especificando Application.WorkSheetFunction. antes del Nombre de la función como en el ejemplo anterior.

Rango de conteo

1234567 'Contar el número de celdas con números en el rangoCountOfCells = Application.WorksheetFunction.Count (Range ("A1: A10"))Debug.Print CountOfCells'Cuenta el número de celdas que no están en blanco en el rangoCountOfNonBlankCells = Application.WorksheetFunction.CountA (Range ("A1: A10"))Debug.Print CountOfNonBlankCells

Escrito por: Vinamra Chandra

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave