Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Logo Excel Avanzado

El objeto range

| 11 comentarios

El objeto Range se refiere a una celda específica ,  una celda activa, un conjunto de celdas (separadas o juntas), o una fila entera o una columna.

Es decir, podemos aplicarla para seleccionar, dichas celdas, o bien para darles algún valor, o aplicarles alguna fórmula.

Primero observemos las formas de poder seleccionarlas :

Range("A1").select      'selecciona la celda A1 en la hoja activa. Esto es porque no especificamos el "Worksheets"

Range("A1: B10").select      'selecciona todo el rango desde A1 hasta B10 en la hoja activa.

Worksheets(3).Range("A1").select       'selecciona la celda A1 en la hoja 3

Range("A1,A3,C5").select                 'selecciona celdas separadas en la hoja activa.

Range("Ingresos").select                  ' selecciona la celda o conjunto de celdas que tengan como nombre "ingresos" en la hoja activa

Ejemplo de Range("Ingresos").select

Ejemplo Objeto Range

(Para mayor visualización de la imagen, hacer click en la misma)

Otra forma de referirse a específicas celdas en un rango de celdas es definir el rango de  celda como una variable, y después seleccionar ciertas celdas dentro de dicho rango

Por ejemplo :

Dim mirango as range

Set mirango = Range("B1:B11")

mirango.range("A1").select

mirango.range("B1").select      '  Es importante saber que al seleccionar una celda dentro del rango B1 : B11, la nominación A1 corresponde a la celda que se ubica en la esquina superior izquierda, en este caso B1, y a partir de esa celda se ubican las demás.

Ahora veamos como darle valor a un rango:

Si se quiere que aparezca un valor como un número simplemente se hace lo siguiente :

Range("A1") = 35                           'Hace que el número 35 aparezca en el la celda A1, en la hoja activa

Worksheets(3).Range("A1:B10").value     = 1      'Hace que el valor de todas las celdas del rango sean 1, en la hoja 3.

Notes que se puede usar   ".value"   o no. El resultado será el mismo.

Otra forma de utilizar el objeto range es asignarle una fórmula :

Worksheets(1).Range("A1").Formula = Int(10 * Rnd())    ' Esta propiedad devuelve el resultado de la fórmula (toma la parte entera de un numero aleatorio entre 0 y 1 multiplicado por 10) y asigna dicho valor a la celda A1 y en la hoja 1

Una importante propiedad es OFFSET. Esta propiedad define a la celda activa con el valor de (0,0) y al desplazarse una cada fila o columna se tiene que adicionar 1 o restar -1 a la posición inicial.  El primer caracter se refiere a las filas y el segundo a las columnas.

Por ejemplo :

Activecell.offset(1,0) = 35            'Si la posición inicial era la celda D5, entonces, esta propiedad asigna el valor de 35 a la celda D6, ya que se desplaza una fila hacia abajo

Ejemplo Objeto Range 2

(Para mayor visualización de la imagen, hacer click en la misma)

Entonces, se puede observar que el objeto range, es muy útil para asignar valores y seleccionar celdas, grupo de celdas, filas o columnas, ya se en una hoja específica o en la hoja actual.

 

Elaborado por: Jorge Ninaja

11 comentarios

  1. Como puedo hacer para mejorar una macro,que realice una operación sencilla, y que mientras se incremente la Base de datos, la macro funcione para los valores nuevos.

    /Macro para una determinado rango/

    Sub Macro3()
    '
    ' Macro3 Macro
    '

    '
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
    Range("D3").Select
    Selection.AutoFill Destination:=Range("D3:D7")
    Range("D3:D7").Select
    End Sub

    Gracias

  2. Detallo un ejemplo sobre lo mencionado, para obtener un rango variable.

    Sub Prueba()
    ' Prueba Macro
    '

    '
    Range("B2").Select
    With Range("B2", [B2].End(xlDown))
    .Offset(, 2).Formula = "=VLOOKUP(A2,$J$2:$K$8,2,0)"

    End With

    End Sub

  3. Hola primero que nada excelente aporta y página felicidades, segundo quisiera pedirte tu ayuda, lo que pasa es que tengo una macro que crea datos en una nueva sheet pero quisiera pegar datos de la ultima sheet que se crea porque la corro varias veces, es decir que corro la macro y creo una ultima sheet con el valor de 5,6,7 y quisiera ver reflejados esos valores en mi hoja 1, y el problema es que no puedo copiar del nombre de la hoja porque quiero que siempre sea de la última que creo al correr la primera macro espero me puedas ayudar gracias!

  4. Hola buen día de antemano felicitaciones por las publicaciones que son de gran ayuda, hace un tiempo estoy leyendo las publicaciones de este Block, adicionalmente realizo algunos que otros algoritmos que son de interés para mi trabajo y hasta dónde mi nivel de conocimiento del lenguaje me lo permite. Actualmente elaboro un código para accesar con Usuario y Contraseña para un equipo de trabajo de 25 personas que lidero en la compañía en la cual laboro desde hace un tiempo. El código base lo vi en un block y he querido hacer algunas modificaciones previendo en que el rango se encuebtre en una hoja distinta o aparte y que además pueda surgir la necesidad de que sean por ejemplo hasta 100 Usuarios. He usado el objeto WorksheetFunction e intentado varias formas para el código pero siempre me sale el aviso de que el usuario no existe ó en otras ocasiones que se ha producido el eeror 13 por tiempo de ejecución. Agradezco tu ayuda y en caso de obtenerla puedo enviar el código para que pueda ser revisado y me indiques por favor la solución y el ó los errores cometidos con una breve explicación para no solo conseguir la solución como tal si no que tan bien para entender sobre el uso de estas aplicaciones u objetos.

  5. hice un formulario para ingresar datos me funcione todo pero cuando filtro un ejemplo cuando filtro el lote g23 para introducir la cantidad de metros cúbicos
    la celda activa se queda en el espacio de lote a10 ya especifique el rango si me pudieran ayudar este es el código que utilizo
    F = ActiveCell.Address
    ActiveCell.Value = TextBox2.Text
    ActiveCell.Offset(0, 2).Select
    ActiveCell.Value = TextBox5.Text
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = TextBox6.Text
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = TextBox7.Text
    ActiveCell.Offset(1, -4).Select
    ActiveWorkbook.Save
    TextBox2.Text = ""
    TextBox5.Text = ""
    TextBox6.Text = ""
    TextBox7.Text = ""
    TextBox2.SetFocus

    si me pudieran ayudar

  6. Buen dia sres. tengo una pregunta espero puedan ayudarme, gracias de antemano

    La consulta es la siguiente:
    obtengo el valor de celda activa de esta manera

    Range("R1").Value = ActiveCell.Value

    lo que ahora quiero hacer es que R1 sea igual al valor de la primera celda de la fila activa...
    Muchas gracias

  7. Como podria nombrar rangos? de acuerdo a una variable.
    Es decir
    x=2
    range("B2,Bx").value = "por encima"
    x+1
    Es un ejemplo no muy bueno pero la pregunta es puede realizarse este tipo de declaraciones en el codigo fuente. Ya lo eh intentado pero no puedo realizar esto a no ser que utilice Cells.

    de antemano gracias por los comentarios

    • x=2
      range(“B2,B” & x ).value = “por encima”
      x=x+1

  8. Como podria hacer una Macro para multiplicar lo seleccionado con el mouse.

    Lo que quiero hacer es una casilla donde venga el porcentaje que quiero multiplicar, después seleccionar con el mouse donde quiero que ese porcentaje multiplique los valores y apretar un boton para que se aplique ese cambio

    Espero me puedan ayudar o decirme si es posible

  9. Hola, estoy haciendo una consultó en un formulario, pero como hago para que me busque en todos los registros, ya que estoy usando el
    To 1000

  10. Hola perdon tengo una duda como podria asignar en el rango las columnas despues de Z ? digamos AA AB AC AD, lo estoy poniendo asi literal pero me marca error

Deja una respuesta

Los campos requeridos estan marcados con *.