Está en la página 1de 20

Excel VBA

SELECCIONAR DIRECTA DE RANGOS


Range(“B5:B8”).Select

Range(“B5”,”B8”).Select

Profesor: Lucio Arango


Excel VBA

Range(“B5,B8”).Select

Range(“A1:A3”,”C2:C5”).Select

Son 15 celdas seleccionadas

Profesor: Lucio Arango


Excel VBA

Range(“CUADRO”).Select

Range(“Enero”,”Abril”).Select

Otro método de seleccionar rangos (útil solo para rangos sencillos, no es usado para varios
desde hasta) es usando los corchetes.

[B5:B9].Select

[cuadro].Select

Profesor: Lucio Arango


Excel VBA

SELECCION RELATIVA
Es una referencia a una celda o grupo de celdas, es necesario indicar una referencia inicial
luego las celdas a tomar en cuenta.

Range(“A3”).Select
ActiveCell.Range(“A1:B1”).Select

Primero se ubica en A3 y desde ahí toma como referencia que esa celda es como el nuevo A1 y
selecciona asumiendo ello, es por ello al decir A1:B1 selecciona hacia la derecha

Range(“A3”).Select
ActiveCell.Range(“A1:A4”).Select

Primero se ubica en A3 y desde ahí toma como referencia que esa celda es como el nuevo A1 y
selecciona asumiendo ello, es por ello al decir A1: A4 selecciona hacia abajo

Profesor: Lucio Arango


Excel VBA

Range(“A3”).Select
ActiveCell.Range(“B2:C3”).Select

Profesor: Lucio Arango


Excel VBA

PROBANDO LA SELECCION

Cierro la ventana de proyectos

Profesor: Lucio Arango


Excel VBA

Hago clic en la primera macro y ejecuto (F5)

Se selecciono el rango de B5 a B9

Sub Macro1()
'Selecciona el rango B5:B9
Range("B5:B9").Select
End Sub

Profesor: Lucio Arango


Excel VBA

Ahora voy a probar la selección discontinua

Sub Macro3()
'Selecciona los rangos B5:B7 y B14:B16
Range("B5:B7,B14:B16").Select
End Sub

Profesor: Lucio Arango


Excel VBA

En caso que haga una selección de un nombre de rango inexistente

NO EXISTE EL RANGO, por eso sale el


mensaje podemos finalizar la macro o
también podemos Depurar.

Si depuro vemos que se sombrea de color


amarillo donde está el error.

Existe un rango llamado CUADRO entonces


podremos corregir el código modificando el
nombre de rango

Sub Macro4()
'Selecciona el rango llamado
TABLA
Range("TABLA").Select
End Sub

Profesor: Lucio Arango


Excel VBA

AHORA VEREMOS CON RESPECTO A MACROS RELATIVAS

Vuelvo activar el Explorador de proyectos y activo el modulo2, luego cierro el explorador de


proyectos para poder tener más espacio

Sub Macro10()
'Selecciona la region actual
ActiveCell.CurrentRegion.Select
End Sub

Esta orden es lo mismo que pulsar Ctrl+* dentro de la tabla, selecciona todas las celdas de datos.

Profesor: Lucio Arango


Excel VBA

Ahora veremos la macro11

Sub Macro11()
'Selecciona todas las celdas ocupadas o vacias hacia abajo a partir de B4
Range("B4").Select
Range("B4", ActiveCell.End(xlDown)).Select
End Sub

Profesor: Lucio Arango


Excel VBA

Si queremos ejecutar paso a paso puedo pulsar F8

Luego que se sombrea el código si pulso F8 veremos la ejecución del código

Sub Macro11()
'Selecciona todas las celdas ocupadas o vacias hacia abajo a partir de
B4
Range("B4").Select
Range("B4", ActiveCell.End(xlDown)).Select
End Sub

Profesor: Lucio Arango


Excel VBA

LA SELECCIÓN END
Mueve el puntero hasta el final de la selección

End(xldown) Ctrl + flecha abajo


End(xlup) Ctrl + flecha arriba
End(xltoRight) Ctrl + flecha derecha
End(xltoleft) Ctrl + flecha izquierda

Range(“B4”,Range(”B9”)).Select
Range(“B4”,ActiveCell.End(xlDown)).Select

Estas órdenes desplazan al extreme de una selección, tener cuidado de la ubicación del cursor
al inicio ya que podría ocurrir que se desplace hacia el extremo osea a la última fila.

Cuidado

Sub Otro()
Range("A4").Select
ActiveCell.End(xlDown).Select
End Sub
Esta macro no selecciona el rango de celdas sino da un salto

Sub Macro11()
'Selecciona todas las celdas ocupadas o vacias hacia abajo a partir de B4
Range("B4").Select
Range("B4", ActiveCell.End(xlDown)).Select
End Sub
Este código selecciona un rango de celdas desde B4 hasta el final de celda con dato B13

Profesor: Lucio Arango


Excel VBA

Si estoy en A8 y ejecuto la siguiente macro

Sub Macro12()
'Selecciona todas las celdas ocupadas o vacias hacia abajo a partir de la
celda actual
Range(ActiveCell, ActiveCell.End(xlDown)).Select
End Sub

El rango a seleccionar no siempre va a ser la misma sino varía según donde me encuentre en
ese momento (esta macro es completamente relativa)

Profesor: Lucio Arango


Excel VBA

LA SENTENCIA offset
Usado para referencias relativas con respecto a la posición actual

ActiveCell.Offset(1,2).Select

En el caso de la macro 13

Sub Macro13()
'Selecciona todas las celdas ocupadas hacia abajo + 1 adicional a partir de la celda actual
Range(ActiveCell, ActiveCell.End(xlDown).Offset(1, 0)).Select
End Sub

Profesor: Lucio Arango


Excel VBA

En esta macro vemos que estando en la celda D5 selecciono hasta el final de D9 luego se
desplazo uno hacia abajo y nada a la derecha dando como resultado la selección del rango
D5:D10

Sub Macro13()
'Selecciona todas las celdas ocupadas hacia abajo + 1 adicional a partir de la
celda actual
Range(ActiveCell, ActiveCell.End(xlDown).Offset(1, 0)).Select
End Sub

Profesor: Lucio Arango


Excel VBA

EJERCICIO APLICATIVO

SOL

Crear una nueva macro Alt+F11

Luego insertar Modulo

Sub Crearcodigo()
Sheets(Range("B3")).Select

End Sub

Lee la celda B3 y salta a la hoja elegida en B3

Profesor: Lucio Arango


Excel VBA

Pensando:

Sub Crearcodigo()
Sheets(Range("B3")).Select
Range("A3").End(xlDown).Select
Cod=Right(ActiveCell,4)+1

0002
Cod=”P” & “000” & Right(ActiveCell,4)+1

0003
00013
000128

Cod = "P" & Right("000" & Right(ActiveCell, 4) + 1, 4)

Sheets("Datos").Select
Range("B4") = Cod
End Sub

El código finalmente será

Sub Crearcodigo()
Lista = Range("B3")
Sheets(Lista).Select
Range("A3").End(xlDown).Select
Cod = "P" & Right("000" & Right(ActiveCell, 4) + 1, 4)
Sheets("Datos").Select
Range("B4") = Cod
End Sub

El código anterior tiene un inconveniente que muestra siempre P, ahora lo modificamos


Sub Crearcodigo()
lista = Range("B3") 'hemos creado esta variable para que guarde el contenido de
la celda, ya que si me cambio a otra hoja no existiria el valor
Sheets(lista).Select
Range("A3").End(xlDown).Select
'Cod = "P" & Right("000" & Right(ActiveCell, 4) + 1, 4)
Cod = Left(lista, 1) & Right("000" & Right(ActiveCell, 4) + 1, 4)
Sheets("Datos").Select
Range("B4") = Cod
End Sub

Lista no va entre comillas porque es un nombre de rango, pero si se usaría en caso de range

Profesor: Lucio Arango


Excel VBA

Ahora debemos de crear otro código para guarde los datos

Sub Registrar()
Lista = Range("B3")
Codigo = Range("B4")
Descripcion = Range("B5")
Unidad = Range("B6")
Costo = Range("B7")
Sheets(Lista).Select
Range("A3").End(xlDown).Offset(1, 0).Select
ActiveCell = Codigo 'escribio el codigo pero la referencia de la celda no
se ha movido
ActiveCell.Offset(0, 1) = Descripcion
ActiveCell.Offset(0, 2) = Unidad
ActiveCell.Offset(0, 3) = Costo
Sheets("Datos").Select
End Sub

Profesor: Lucio Arango


Excel VBA

Modificando ahora deseo que regrese a la hoja1 y borre los datos


Sub Registrar()
Lista = Range("B3")
Codigo = Range("B4")
Descripcion = Range("B5")
Unidad = Range("B6")
Costo = Range("B7")
Sheets(Lista).Select
Range("A3").End(xlDown).Offset(1, 0).Select
ActiveCell = Codigo 'escribio el codigo pero la referencia de la celda no
se ha movido
ActiveCell.Offset(0, 1) = Descripcion
ActiveCell.Offset(0, 2) = Unidad
ActiveCell.Offset(0, 3) = Costo
Sheets("Datos").Select
Range("B3:B7").Select
Selection.ClearContents 'clear borra todo contenido y formato y
clearcontents borra solo el contenido
Range("B3").Select
End Sub

Profesor: Lucio Arango