Curso de Excel Avanzado J. David Moreno TRABAJANDO CON RANGOS J. David Moreno 1
3 Para programar correctamente en VBA y trabajar con Excel es obligatorio aprender a trabajar con rangos (seleccionar, copiar, pegar ) 4 COPIAR UN RANGO Y PEGARLO EN OTRO En Excel es muy normal copiar un conjunto de datos y pegarlos en otro sitio. Vamos a copiar los datos en las celdas A1 a B7 y pegarlos en la celda D1. Ejemplo: Si no sabe como empezar, puede usar la Grabadora de Macros y examinar el código que genera. 2
5 GRABADORA DE MACROS Usemos la grabadora de macros para ver el código que genera. Código de la grabadora PRIMERO hace selección SEGUNDO: Copia TERCERO: Selecciona destino CUARTO: Pega QUINTO: anula modo copiar Resultado de ejecutar la macro 6 CÓDIGO VBA DIRECTO Cuidado En VBA no es necesario SELECCIONAR un rango determinado para trabajar con él. Podemos copiar el Rango A1:B7 directamente usando el método Copy. Este permite indicar el destino donde se copiará. 3
7 COPIAR UN RANGO DE TAMAÑO VARIABLE En muchos casos queremos copiar un rango de celdas en el que las dimensiones exactas (filas y columnas) se desconocen. Ejemplo: En el fichero DatosPedidos.xls contiene datos de los clientes de una empresa, pero cada día aparecen nuevos clientes, así el número de filas no es fijo. Queremos una macro que copie este rango variable y lo pegue en la hoja 1 8 CÓDIGO VBA Debemos usar la propiedad CurrentRegion Que devuelve el objeto Range que incluye el bloque de celdas que rodean a la celda en concreto. 4
9 SELECCIONAR EL EXTREMO DE UNA FILA O COLUMNA En Excel es muy común seleccionar desde la celda actual todas las celdas hasta el final de las columnas o de la fila Se hace con Control+Mayuscula+Flecha En VBA podemos usar el método End End es un método del objeto Range El método End tiene solo un argumento que puede ser: xlup xldown xltoleft xltoright 10 Ejemplo: Usando el ejemplo de los pedidos seleccionar todas las filas hasta el final de los datos. 5
11 SELECCIONAR UNA FILA O UNA COLUMNA Utilizamos la propiedad EntireColumn, que devuelve un Range que es una columna. Para seleccionar una fila usaremos EntireRow. Ejemplo: La macro siguiente selecciona la columna de la celda activa. 12 Ejercicio: Usando la propiedad EntireRow cambie a negrita todas las celdas en la fila 4 del ejemplo de días de la semana. Si lo hacemos con la grabadora no usa EntireRow sino selección diferente Rows("4:4").Select Selection.Font.Bold = True 6
TRABAJAR CON FUNCIONES Silvia Mayoral 14 Recordar que hay 2 tipos de procedimientos: PROCEDIMIENTOS SUB y FUNCIONES. Los procedimientos de Funciones se pueden usar: A. Desde otro procedimiento en VBA B. Desde una hoja de Excel, como cualquier otra función. Su código sería: Function NombreFunción(Arg1,Arg2, ) [Sentencias] End Function La diferencia, es que una función siempre DEVUELVE UN VALOR 7
15 Podemos escribir directamente el código en VBA, iniciando i i con Function End Fuction O darle al menu INSERTAR Elegir FUNCIÓN 16 Ejemplo: Supongamos que usted tiene que calcular el área de un rectángulo frecuentemente, y desea crear una función que le de directamente este área. Area= Base * Altura Solución código: Ahora vaya a Excel y busque en FÓRMULAS DEFINIDAS POR EL USUARIO 8
17 Podemos introducirlo así O directamente al escribir el nombre de la función AreaRectang ya nos aparece como una función 18 Usar una función dentro de un procedimiento SUB Podemos ejecutar un procedimiento Función dentro de un procedimiento SUB simplemente llamándola con los argumentos que requiere y como debe dar un valor, es necesario asignarle una variable. Ejercicio: Cree una macro que a través de InputBox pida al usuario la base y altura, y usando la función AreaRectang calcule el área. Después muestre el resultado con MsgBox. 9
19 Solución: 20 Para insertar funciones que no está grabado su código en ese mismo libro. Si la función fue grabada en otro libro, puede usarla pero debe indicar antes de la función el nombre del libro donde se grabó. =NombreLibro.xlsm!NombreFuncion(Arg1,Arg2) Lo mejor si está en otro libro es usar el Asistente t para Funciones, y Excel pone toda la ruta directamente 10
21 Podemos introducir la definición o explicación a nuestra función siguiendo estos pasos: 1. Cree la Función en VBA 2. Seleccione en Excel menú PROGRAMADOR MACROS 3. Aquí aparecen solo los nombres de macros SUB. Tiene que introducir el nombre de la función có AreaRectang ecta 4. Clic en Opciones e introduzca la explicación CONTROLES DE EJECUCIÓN Silvia Mayoral 11
CONTROLES DE EJECUCION 23 VBA utiliza muchos términos que se encuentran en muchos otros lenguajes de programación. Estos términos se usan para controlar el flujo de ejecución. If-Then For-Next With-End-With Select Case Do While Do Until CONTROLES DE EJECUCION 24 Constructor If-Then Una de las estructuras más importantes, que da a las aplicaciones la capacidad de tomar decisiones. If condicion Then intrucciones End If (no necesario sino se salta de línea) Si la condición es verdadera entonces se ejecuta una serie de instrucciones. Si incluye Else, entonces se ejecutará otras sentencias si la condición no es verdadera. 12
CONTROLES DE EJECUCION 25 Constructor If-Then Ejemplo: Ejercicio: Construir una Sub que si una celda es negativa le reste 5 y te lo diga y en caso de que sea positivo sume 5 y te lo enseñe CONTROLES DE EJECUCION 26 Solución: 13
CONTROLES DE EJECUCION 27 Bucle For-Next Se utiliza para ejecutar una o más instrucciones varias veces. For contador To Final Instrucciones Next contador CONTROLES DE EJECUCION 28 Constructor With-End With Modo abreviado de usar varias propiedades o métodos al mismo objeto. SIMPLIFICA MUCHO LA VIDA 14
CONTROLES DE EJECUCION 29 Constructor Select Case Modo abreviado de escoger entre varias opciones. Simplifica el no tener que hacer muchos If anidados CONTROLES DE EJECUCION 30 Ejercicio: Estas preparado para hacer una función que calcule unas comisiones sobre unas ventas (dato inicial), de forma que la comisión cambia: Ventas < 1.000 8% Entre 1.000 y 10.000 10% Entre 10.000 y 100.000 12% Superiores a 100.000 14% En caso que gane más de 1.000 le de un mensaje de lo que has ganado tio 15
CONTROLES DE EJECUCION 31 Solución: CONTROLES DE EJECUCION 32 Bucle Do.Loop Until Estructura que ejecuta un bloque de sentencias un número indefinido de veces hasta que una condición llegue a ser True. Do Until condicion. Sentencias.Loop Do While Condicion Sentencias Loop Cuidado no se ejecute de manera indefinida 16
Algunas Funciones Interesantes 33 Función que Escribe las Formulas que hay en una Hoja en Otra Algunas Funciones Interesantes 34 Función que Habla lo que pone en una celda Función que indica el usuario 17