Contenido del Curso
Microsoft Excel Programación Visual Basic Inicial 1. ¿Cómo se crea un programa en Excel? a. La grabadora de macros b. El Editor de Visual Basic para Excel 2. Uso de la Grabadora de Macros a. Macros con referencias Absolutas b. Macros con referencias Relativas c. Asignar una macro a un objeto d. Como eliminar una macro e. Macros en Excel 2003 y en Excel 2007 3. Escritura de Macros en el Editor de Visual Basic para Excel a. Ingreso al Editor Editor de Visual Basic de Excel b. Qué es un programa en Visual Basic c. Estructura de un programa para Excel d. El Código en Visual Basic i. Sentencias de Declaración ii. Sentencias de Asignación iii. Sentencias Ejecutables e. La ventana Explorador de Proyectos f. Ejecución de macros paso a paso 4. Manejo de Rangos, Hojas y Archivos a. Propiedades y Métodos b. Selección de rangos: Directa y relativa c. Desplazamiento Desplazamiento y selección: Propiedad Rango y Offset d. Nombres de rangos rangos y nombres de de hojas: Directa y relativa e. Abrir, cerrar, guardar y eliminar archivos f. Uso de funciones de Visual Basic g. Uso de funciones de hoja de cálculo en Visual Basic 5. Sentencias de Control a. If...then…else b. Select Case
Elaborado por: Daniel Zegarra Zavaleta
Pág. 1
c. d. e. f.
Do While/Until For Next For Each Next With End With
6. Uso de botones de formulario a. Ejecución de macros con botones de formulario 7. Las funciones MsgBox e InputBox a. Cajas de salida de información MsgBox b. Cajas de ingreso de información InputBox 8. Creación de formularios UserForm a. Herramientas de formularios b. La ventana Propiedades c. Diseño de formularios interactivos
Elaborado por: Daniel Zegarra Zavaleta
Pág. 2
1. La Programación en Excel a. Uso de la grabadora de macros A pesar que la programación se realiza internamente utilizando el lenguaje de Visual Basic, no es necesario que los usuarios de Excel sepan necesariamente el uso de este lenguaje. Y esto es así, gracias a que existe la posibilidad de que se puedan grabar las acciones que necesitamos utilizando para ello una grabadora de macros, la cual almacena en memoria todas las acciones a grabar, e internamente convierte a estas en un programa en Visual Basic. b. Que es la grabadora de macros Es un programa de Office que se encarga de almacenar todos los pasos y acciones que se realizan en la pantalla, ya sea usando para ello el teclado t eclado o el mouse. Todo lo que se realice será grabado como un grupo de acciones que luego podrán repetirse cuantas veces quiera y en el momento que se desee. Para crear una macro haciendo uso de la grabadora de macros se siguen los siguientes pasos: 1.- Llamar al menú Herramientas/ Macro/Grabar nueva macro 2.- Escribir un nombre para la macro a grabar. Este nombre no deberá contener espacios en blanco. 3.- Al aparecer el mensaje “Grabando” en la barra de estado, hay que realizar cuidadosamente y en forma secuencial, todas las acciones que se desean grabar. 4.- Para finalizar la grabación hacer un clic en el botón: , o llamar al menú Herramientas/Macro/Finalizar grabación, con lo cual deberá desaparecer el mensaje “Grabando” en la barra de estado. e stado. Nota.-
Las macros al ser creadas pueden grabarse en el libro actual, como se puede apreciar en la ventana de dialogo anterior en la opción: Este libro , con lo cual la macro solo funcionará en ese libro; o también se pudo elegir en la ventana de diálogo la opción: Libro de macros personal , para cuyo caso la macro podría funcionar también en todos los libros de Excel, sin embargo hay que tener cuidado; pues si se graba en el libro de macros personal esto hará que dicha macro y todas las que se encuentren allí sean cargadas en memoria RAM cada vez que se ingrese a Excel, restando restando con ello memoria al computador innecesariamente innecesariamente quizas.
Una vez creada, veamos a continuación como se hace para que la macro funcione: c. Ejecución de una macro Una macro puede ejecutarse con el menú Herramientas/Macro/Macros, o presionar Alt + F8 y en la ventana de dialogo, seleccionar su nombre y luego elegir el botón Ejecutar. Elaborado por: Daniel Zegarra Zavaleta
Pág. 3
Sin embargo, un modo mas controlado y fácil de ejecutar una macro es asignándola a un elemento de imagen, como puede ser a un dibujo de Autoformas, a un botón de herramientas personalizado o incluso hasta a un gráfico. Para asignar una macro a un botón de Autoformas realizar lo siguiente:
Clic Clic derech derechoo ---------------------------------------------Asignar macro ... -------------------------------
1.- Señalar con el mouse el borde del botón y hacer un clic derecho para llamar al menú contextual 2.- En el menú elegir la opción Asignar macro. macro. 3.- Seleccionar el nombre de la macro de la lista y luego clic en Aceptar.
Ejemplo Se va ha crear una macro que alinee vertica tu como vaslmente al centro, el contenido de una celda: 1.- Para esto primero escribir en una una celda un dato. 2.- Llame al menú Herramientas/Macro/Grabar Herramientas/Macro/Grabar nueva macro y escriba como nombre de la macro: CentradoVertical (sin dejar espacio en blanco entre las 2 palabras), y luego Aceptar. 3.Al aparecer el mensaje “Grabando ” en la barra de estado, realizar la acción de centrado, esto es: llamar al menú Formato/Celdas y en la ficha Alineación elegir en la opción Alineación del texto Vertical, la alternativa Centrar, luego elegir el botón Aceptar.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 4
4.Finalmente terminar la macro con el botón Detener grabación o con el menú Herramientas/ Macro/Detener Macro/Detener grabación grabación. 5.A continuación dibuje en la hoja un botón con Autoformas y haciendo un clic derecho en él, asígnele la macro CentradoVertical. 6.- Ahora, al escribir en una celda un dato podrá centrar el dato verticalmente haciendo un clic en el botón de la macro.
d. Cómo es el programa creado por la grabadora de macros Para la macro del ejemplo anterior, el programa o subrutina en el lenguaje de Visual Basic que se habría generado automáticamente, sería el siguiente: Sub CentradoVertical() CentradoVertical() ' ' Macro creada por Daniel Zegarra - UNI ' With Selection With Selection .HorizontalAlignment .HorizontalAlignment = xlGeneral
.VerticalAlignment .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .ShrinkToFit = False .MergeCells = False End With End Sub
Este programa se encontraría escrito en una hoja de Modulo insertada dentro del libro actual de Excel, y para ver esta hoja de módulo habría que ingresar a la ventana del Editor de Visual Basic. e. Como ver el programa en el Editor de Visual Basic Se puede hacer de dos formas: i. Presionando teclas Alt+F8, o llamando al menú Herramientas/Macro/ Macros ii. Presionando las teclas Alt+F11, o llamando al menú Herramientas/Macro/ Editor de Visual Basic . La primera forma para ver una macro es llamando al menú Herramientas/Macro/Macros o presionar las teclas Alt + F8 y seleccionando el nombre de la macro deseada, luego hacer un clic en el botón de Modificar de la ventana de dialogo.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 5
La segunda forma de ver una macro es llamando al menú Herramientas/Macro/ Editor de Visual Basic . Si al ingresar al Editor de Visual Basic la ventana estuviese totalmente vacía, llamar al menú Ver y elegir la opción Explorador de Proyectos , o presionar Ctrl+R . Se verá entonces la siguiente ventana en la pantalla:
En la ventana de Proyecto de la izquierda, haga doble clic en el elemento Modulo1 para abrir la ventana ventana conteniendo el código en Visual Visual Basic de la macro. macro.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 6
f. Cómo eliminar una macro Se puede hacer de dos formas: i. Presionando teclas Alt+F8, o llamando al menú Herramientas/Macro/ Macros , seleccionando el nombre de la macro a eliminar, y luego haciendo clic en el botón Eliminar. Finalmente hacer clic en el botón Si.
ii.
Ingresando al / Editor de Visual Basic , y luego de seleccionar las sentencias de la macro a eliminar, presionar la tecla Suprimir.
Nota.-
Si al crear una macro con la grabadora de macros, se le da como nombre el de una macro ya existente, aparecerá una ventana consultándonos si se desea sobrescribir esa macro. Si se le contesta que Si, entonces se borrará la macro existente y se grabará una nueva en su lugar.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 7
Ejercicio Nº 1: Acciones repetitivas con macros Hay ocasiones en que se necesita en la hoja de calculo repetir un grupo de acciones muchas veces para diferentes rangos de celda. En estos casos es cuando las macros nos serán de gran ayuda. Suponga que se dispone de una lista diaria de clientes que asisten durante un mes a realizar sus compras a una zapatería, y se desea ordenar esta lista en grupos semanales, y cada semana ordenada descendentemente según la cantidad de clientes asistentes. Una vez ordenada cada semana en orden descendente poner en negrita y de color rojo la cantidad maxima de personas que asistieron en cada semana. Veamos como se soluciona este caso con ayuda de las macros:
1ra Parte: Crear la tabla de clientes que asisten a una zapatería . 1.- En una hoja en blanco escriba lo siguiente:
2.- Seleccionando la celda A5, llame al menú Formato/Celdas y en la ficha Número, categoría personalizada, diseñe el siguiente formato en la casilla Tipo:
ddd dd mmm La fecha aparecerá como:
Mié 01 Jun 3.- Luego con el botón derecho del mouse arrastre el cuadro de relleno de la celda A5 hasta llegar a la celda A26, y cuando al soltar el botón del mouse aparezca un menú contextual, elegir la opción Rellenar días de la semana , para copiar la serie de días laborales del mes de Junio. (Solo aparecerán 5 días laborables en cada semana)
Elaborado por: Daniel Zegarra Zavaleta
Pág. 8
Luego en la columna B vamos a escribir la cantidad de personas que asistieron cada día a la zapatería. Para simular la cantidad de personas vamos a hacer que Excel escriba números al azar entre 10 y 150: 4.- Escriba la siguiente formula en la celda B5:
=10+ENTERO(ALEATORIO()*140) 5.- Ahora copie esta formula haciendo doble clic en el cuadro de relleno. Luego convierta el resultado de estas formulas en valores: 6.- Seleccione el rango B5:B26 y elija el menú Edición/Copiar , luego en el menú Edición/Pegado especial , marque la opción Valores y Aceptar. Finalmente [Esc].
2da Parte: Dividir las personas en grupos semanales ordenados descendentemente . Como se explicó al principio, se desea una macro que haga lo siguiente:
7.-
Primero seleccione la celda A8.
8.-
Llame al menú Herramientas/Macro/Grabar nueva macro
9.-
Como nombre para la macro escriba la palabra Grupos y como letra de método abreviado escriba la letra " k ". Luego Aceptar
10.- Al aparecer el mensaje "Grabando" en la barra de estado, verifique que se encuentre activado el botón de herramientas Referencia relativa:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 9
11.- Luego realice los siguientes pasos: •
•
•
•
•
Llamar al Insertar/Fila
menu
Seleccionar la celda A7 y presionar las teclas Ctrl+* para seleccionar la región actual (A5:B7) Llamar al menú Datos/Ordenar y elegir ordenar por Columna B , en Descendente orden y verifique que No se considere tener fila de encabezamiento. Luego haga clic en el botón Aceptar. Seleccionar la celda B5 y ponerla en Negrita , y de color de fuente Roja. Seleccione la celda A14 y haga un clic en el botón Detener grabación.
12.- Guarde el libro con el nombre de archivo Asistencia.
Con esto ya tendremos ordenado el primer grupo delos días correspondientes a la primera semana de Julio. Y como el puntero de celda se encuentra en A14, solo bastará con presionar las teclas Ctrl+k para ejecutar la macro y que esta se encargue de ordenar el grupo de la segunda semana, y así sucesivamente hasta terminar con el resto del mes.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 10
2. Escritura de programas en el Editor de Visual Basic a. Que es Visual Basic para Aplicaciones Es un lenguaje de programación por medio del cual se pueden escribir instrucciones secuenciales y detalladas dentro de uno o varios programas, para lograr así automatizar el uso de las aplicaciones del paquete Office. A este grupo de instrucciones escritas para una aplicación se la conoce como una Macro ( Macro instrucción o grupo de varias instrucciones) b. El Editor de Visual Basic La escritura de estas instrucciones se realiza con ayuda de un Editor de Visual Basic, que es una ventana de aplicación adicional a Excel o a cualquier otra aplicación de Office, pero la macro que se crea a través del Editor será guardada conjuntamente con el libro de Excel para el cual se han escrito estas instrucciones.
Para ingresar al Editor de Visual Basic: Estando en cualquier libro de Excel, llamar al menú Herramientas/ Macro/Editor de Visual Basic, o sino, presionar las teclas Alt+F11.
Si al ingresar al Editor de Visual Basic, no estuvieran visibles el explorador de proyectos o la ventana de módulo, entonces proceda del siguiente modo: 1.- Llamar al menú Ver/Explorador de proyectos . 2.- Llamar al menú Insertar/Módulo.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 11
El Explorador de proyectos nos muestra en un árbol de carpetas los diferentes archivos o libros abiertos en Excel, y dentro de cada libro se pueden apreciar los objetos que existen en su interior: hojas de cálculo, hojas de módulos, formularios, etc. La ventana de Módulo es donde se escribirán las instrucciones que nos permitirán crear las Macros en Visual Basic.
3. Las instrucciones de Visual Basic Aclaración previa: Si para usted es la primera vez que va a escribir un programa para computadora, entonces al principio esto le parecerá que es algo complicado, y lo que inicialmente vemos escrito dentro de un programa es como leer chino, pero no se desanime; lo que ocurre es que a pesar de que el computador es una máquina inteligente, ésta sin embargo, no razona como lo haría cualquier persona; así que cuando hay que darle ordenes al computador hay que establecer ciertas reglas estrictas con el fin de que entienda claramente que es lo que deseamos que haga. Por ejemplo Si en su casa se ha puesto la tetera para hervir agua en una cocina a gas, y comienza a hervir el agua; entonces usted podría ordenarle a su hijo menor que por favor apague la cocina. Si su hijo aun es pequeño, ¿cómo cree que haría para apagar la cocina?: - Comienza a soplar la hornilla hasta que se apaga? - Hecha agua a la hornilla para apagarla? - Gira la perilla de encendido para apagar la hornilla? Usted tendría que ser más preciso en darle las instrucciones al pequeño para que pueda apagar la cocina como es debido sin que ocurra ninguna desgracia, pues él quizás aun no se percata exactamente del peligro que esta acción conlleva. Pues veamos ahora, el computador tampoco se da cuenta de lo que en realidad está haciendo, el solo cumple las ordenes que le damos, de allí que estas órdenes deben ser muy precisas, sin ambigüedades para que no lleven a erróneas suposiciones por parte del computador. Es así que primeramente cada orden dada al computador tiene una forma exacta de escribirse; a esta forma exacta de escribir las órdenes se conoce como la sintaxis de las instrucciones. Por ejemplo, si en vez de ordenar " apaga la cocina ", se le dijese al niño " paga la cocina". El no va a poder obedecernos porque no conoce como se realiza esa acción ya que aun no maneja dinero y no sabe cómo se paga un artefacto. Esto es un error de sintaxis, la palabra está mal escrita. Pero además las instrucciones deben seguir una cierta lógica adecuada porque si no también se estaría incurriendo en un error de lógica al escribir el programa. Por ejemplo, un error de lógica podría ser que se le diga al niño: " por favor apaga la cocina y luego sírveme un café ". La orden aparentemente parece correcta. Pero el Elaborado por: Daniel Zegarra Zavaleta
Pág. 12
niño podría ir y apagar la luz de la cocina y luego intentar a oscuras servirme un café. Esto se conoce como un error de lógica. Entonces debimos haber dicho: " por favor apaga la hornilla derecha de la cocina y luego sírveme un café ". Algo así es como funciona la lógica de un computador, y teniendo en cuenta todo esto es que se escriben los programas de computadora. Observe además que la lógica empleada para dar órdenes a un niño en algún lugar de nuestro planeta es independiente de si estas órdenes las damos en cualquier idioma, ya sea en español, o inglés, o ruso o japonés; dependiendo del lugar donde nos encontremos. Es decir; el idioma puede ser diferente, pero la lógica es la misma. La lógica de las computadoras es siempre la misma, pero el lenguaje que usamos para dar las instrucciones es la que puede ser diferente; en nuestro caso usaremos el lenguaje de Visual Basic para Aplicaciones de Office. Una instrucción de Visual Basic puede incluir palabras clave, operadores, variables, constantes y expresiones . Todas las instrucciones pertenecen a una de las tres categorías siguientes: 1. INSTRUCCIONES DE DECLARACIÓN, que dan nombre a una variable, constante o procedimiento y pueden también especificar su tipo de datos. 2. INSTRUCCIONES DE ASIGNACIÓN , que asignan un valor o expresión a una variable o constante. 3. INSTRUCCIONES EJECUTABLES, que inician acciones. Estas instrucciones pueden ejecutar un método o función y pueden saltar o evitar bloques de código. Las instrucciones ejecutables a menudo contienen operadores condicionales o matemáticos. a. Continuar instrucciones en múltiples líneas Una instrucción cabe normalmente en una línea, pero puede continuarse en la siguiente línea utilizando un carácter de continuación de línea que es un carácter de subrayado o guión bajo ( _ ) precedido siempre por un espacio en blanco. En el siguiente ejemplo, la instrucción ejecutable MsgBox se extiende dos tres líneas: Guión bajo precedido de un espacio en blanco. Sub Mensaje() Dim Cliente As String Cliente = "José Samuel" MsgBox Prompt:="Hola " & Cliente, Title:="Cuadro de saludo", _ Buttons:=vbExclamation End Sub
b. Añadir comentarios Los comentarios pueden explicar un procedimiento o una instrucción en particular a cualquier persona que tenga que leer el código. Visual Basic ignora los comentarios cuando ejecuta los procedimientos. Las líneas de comentario comienzan por un apóstrofe (') o con la palabra clave Rem seguida por un espacio y puede colocarse en cualquier lugar del procedimiento. Para añadir un comentario a la misma línea que ocupa una instrucción, debe insertarse un apóstrofe después de esta, seguido por el comentario. Los comentarios aparecen en pantalla en color verde, color predefinido.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 13
Sub Mensaje() ‘ Macro que muestra un mensaje de saludo en la pantalla Dim Cliente As String ‘ Declara la variable Cliente como String Cliente = "José Samuel" ‘ Asigna un texto a la variable Cliente ‘ La siguiente sentencia muestra una ventana con el mensaje de saludo MsgBox Prompt:="Hola " & Cliente, Title:="Cuadro de saludo", _ Buttons:=vbExclamation End Sub
c. Comprobar errores de sintaxis Si se presiona la tecla Enter después de escribir una línea de código y esta línea aparece en pantalla en color rojo (puede que aparezca también un mensaje de error), esto indica que se ha incurrido en un error de sintaxis, o sea la instrucción está mal escrita y se debe observar cuál es el problema en la instrucción y corregirlo.
4. Escribir instrucciones de declaración Las instrucciones de declaración se usan para dar nombre y definir procedimientos, variables, matrices y constantes. Cuando se declara un procedimiento, variable o constante, también se define su alcance que depende del lugar en que se coloque la declaración y de las palabras clave que se usan para ello. El siguiente ejemplo contiene tres declaraciones. Sub DarFormato() Const Limite As Integer = 33 Dim miCelda As Range End Sub
La instrucción Sub, la instrucción Const y la instrucción Dim, son instrucciones de declaración. La instrucción Sub (con la correspondiente instrucción End Sub) declara un procedimiento llamado DarFormato. Todas las instrucciones que aparecen entre las instrucciones Sub y End Sub se ejecutan cuando el procedimiento DarFormato se ejecuta o se llama. La instrucción Const declara la constante Limite, especificando el tipo de datos Integer y un valor de 33. La instrucción Dim declara la variable miCelda. El tipo de datos es objeto, en este caso, un objeto Range de Microsoft Excel. Se puede declarar una variable que sea cualquiera de los objetos que están accesibles a la aplicación que se está usando. Las instrucciones Dim son un tipo de instrucción que se utiliza para declarar variables. Otras palabras clave utilizadas en las declaraciones son ReDim, Static, Public, Private, Function y Const.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 14
a. Qué son los tipos de datos Variant El tipo de datos Variant se especifica automáticamente si no se especifica otro tipo de datos al declarar una constante, variable, o argumento. Las variables declaradas como del tipo de datos Variant pueden contener valores numéricos, cadenas de texto, fecha, hora o Booleans y pueden convertir los valores que contienen de forma automática. Los valores numéricos Variant ocupan 16 bytes de memoria (lo que sólo es significativo en procedimientos grandes o módulos complejos) y son más lentos a la hora de su acceso que las variables de tipo explícito de los restantes tipos. Es muy raro utilizar el tipo de datos Variant para una constante. Los valores de cadena Variant necesitan 22 bytes de memoria. Las siguientes instrucciones crean variables Variant: Dim SUELDO Dim EDAD As Variant EMPRESA = "Editora Macro"
La última instrucción no declara explícitamente la variable EMPRESA, sino que la declara implícitamente, o automáticamente. Las variables que se declaran implícitamente se especifican como del tipo de datos Variant. Nota:
Si se especifica un tipo de datos para una variable o argumento y a continuación se utiliza un tipo erróneo de datos, se producirá un error de tipo de datos. Para evitar errores de tipo de datos, se deben usar sólo variables (del tipo de datos Variant) o declarar explícitamente todas las variables y especificar para ellas un tipo de datos. El último método es el preferible.
5. Escribir instrucciones de asignación Las instrucciones de asignación, asignan (almacenan o guardan) un valor o expresión a una variable o constante. Las instrucciones de asignación incluyen siempre un signo igual (=). El siguiente ejemplo almacena la coordenada de la celda activa en la variable Lugar. Luego MsgBox muestra esta coordenada en una ventana. Sub Ubicacion() Dim Lugar As String Lugar = ActiveCell.Address MsgBox "La celda actual es " & Lugar End Sub
Este otro ejemplo utiliza InputBox para preguntar el nombre a una persona y luego asignar la respuesta a la variable Nombre. Luego MsgBox muestra el nombre de la persona en una ventana. Sub Pregunta()
Elaborado por: Daniel Zegarra Zavaleta
Pág. 15
Dim Nombre As String Nombre = InputBox("¿Cómo se llama usted?") MsgBox "Su nombre es " & Nombre End Sub
La instrucción Set se utiliza para asignar un objeto a una variable que ha sido declarada como objeto. La palabra clave Set es necesaria. En el siguiente ejemplo, la instrucción Set asigna la celda A1 de la Hoja3 a la variable de objeto Celda. Luego le asigna la propiedad Bold e Italica al objeto Font y finalmente asigna a Celda el valor 2005. Sub DarFormato() Dim Celda As Range Set Celda = Worksheets("Hoja3").Range("A1") With Celda.Font .Bold = True .Italic = True End With Celda= 2005 End Sub
Las instrucciones que establecen valores de propiedad son también instrucciones de asignación. El siguiente ejemplo asigna la propiedad Bold (negrita) del objeto Font (fuente) para la celda activa: Como resultado el contenido de la celda activa aparecerá en negrita. ActiveCell.Font.Bold = True
6. Trabajo con celdas en Visual Basic Es una tarea común en Visual Basic especificar una celda o un rango de celdas, y a continuación realizar alguna acción en ellas, como ingresar un dato, escribir una fórmula o cambiar el formato. Normalmente esto se realiza en una instrucción que primero identifica el rango y luego además cambia una propiedad o aplica un método sobre ese rango. Un objeto Range en Visual Basic puede ser una celda individual o un rango de celdas. Los siguientes temas muestran las maneras más usuales de identificar y trabajar con objetos Range. a. Referencia a celdas y rangos utilizando la notación A1 La siguiente tabla muestra algunas referencias de estilo A1 utilizando el método Range.
Referencia
Significado
Range("A1")
Celda A1
Range("A1:B4")
Rango A1:B4
Elaborado por: Daniel Zegarra Zavaleta
Pág. 16
Referencia
Significado
Range("A1:B4,E3:F9")
Múltiple áreas separadas
Range("A:A")
Toda la columna A
Range("3:3")
Toda la fila 3
Range("A:C")
Columnas de la A a la C
Range("1:5")
Filas de la 1 a la 5
Range("1:1,3:3,8:8")
Múltiples filas 1, 3 y 8
Range("A:A,C:C,F:F")
Múltiples columnas A, C y F
Range("A1:B4","E3:F9")
Equivalente a todo el rango A1:F9
Utilice la propiedad Rows o Columns para trabajar con filas o columnas enteras. Estas propiedades devuelven un objeto Range que representa un rango de celdas. La siguiente tabla muestra algunas referencias de fila y columna, utilizando las propiedades Rows y Columns.
Referencia
Significado
Rows(1)
Fila uno
Rows
Todas las filas de la hoja de cálculo
Columns(1)
Columna uno
Columns("A")
Columna uno
Columns
Todas las columnas de la hoja de cálculo
b. Sentencias usadas para manejar celdas y rangos de celdas Los métodos: Range Select Activate Clear ClearContents ClearFormats Delete
Insert
Las propiedades: Selection Offset
ActiveCell
CurrentRegion
Columns, Rows
Count
7. Para seleccionar celdas y rangos de celdas a. Selección directa de celdas y rangos
Sintaxis: Donde:
Range( referencia ).Select referencia puede ser un rango de celdas o un nombre de rango, escritos entre comillas
Elaborado por: Daniel Zegarra Zavaleta
Pág. 17
•
Selecciona el rango B5 Range("B5").Select
•
Selecciona el rango B5:B9 Range("B5:B9").Select
•
Selecciona el rango B5:B9 Range("B5", "B9").Select
•
Selecciona solo dos celdas B5 y B9 Range("B5,B9").Select
•
Selecciona los rangos B5:B7 y B14:B16 Range("B5:B7,B14:B16").Select
•
Selecciona el rango llamado TABLA Range("TABLA").Select
Otra forma para seleccionar un rango, es escribiéndolo entre corchetes:
Sintaxis: Donde: •
[referencia].Select referencia puede ser un rango de celdas o un nombre de rango, escritos entre comillas
Selecciona el rango B5:C7 [B5:C7].Select
•
Selecciona el rango llamado TABLA [TABLA].Select
b. Selección de rangos de manera relativa:
Sintaxis: Donde:
•
ActiveCell.Range(referencia).Select Es un rango de celdas que considera a la celda actual referencia como si fuera la primera celda superior izquierda de la hoja de calculo
Selecciona 4 celdas hacia abajo a partir de la celda actual ActiveCell.Range("A1:A4").Select
•
Selecciona 4 celdas hacia la derecha a partir de la celda actual ActiveCell.Range("A1:D1").Select
•
Selecciona 4 celdas hacia abajo ubicadas 2 columnas a la derecha de la celda actual ActiveCell.Range("C1:C4").Select
•
Selecciona la región actual ActiveCell.CurrentRegion.Select
Elaborado por: Daniel Zegarra Zavaleta
Pág. 18
c. Selección consecutiva de celdas ocupadas o vacías:
Sintaxis:
•
End(xlDown)
hasta la última celda hacia abajo
End(xlUp)
hasta la última celda hacia arriba
End(xltoRight)
hasta la última celda hacia la derecha
End(xltoLeft)
hasta la última celda hacia la izquierda
Selecciona todas las celdas ocupadas o vacías hacia abajo, a partir de B4 Range("B4").Select Range("B4", ActiveCell.End(xlDown)).Select
•
Selecciona todas las celdas ocupadas o vacías hacia abajo, a partir de B4 Range("B4", Range("B4").End(xlDown)).Select
•
Selecciona todas las celdas ocupadas o vacías hacia abajo, a partir de la celda actual Range(ActiveCell, ActiveCell.End(xlDown)).Select
•
Selecciona todas las celdas ocupadas hacia abajo + 1 adicional Range(ActiveCell, ActiveCell.End(xlDown).Offset(1, 0)).Select
•
Selecciona una fila de 4 celdas y a partir de ellas hacia abajo todas las celdas ocupadas + 5 filas adicionales Range(ActiveCell.Range("A1:D1"), ActiveCell.End(xlDown). _ Offset(5, 0)).Select
d. Selección directa de Columnas •
Selecciona toda la columna E Range("E:E").Select
•
Selecciona todas las columnas desde la E hasta la K Range("E:K").Select
•
Selecciona todas las columnas desde la E hasta la K Range("EE”,”K:K").Select
•
Selecciona únicamente las columnas E y K Range("E:E,K:K").Select
e. Selección relativa de Columnas •
Selecciona toda la columna de la celda actual ActiveCell.EntireColumn.Select
•
Selecciona todas las columnas del rango seleccionado
Elaborado por: Daniel Zegarra Zavaleta
Pág. 19
Selection.EntireColumn.Select •
Selecciona en la región actual las celdas hacia abajo a partir de la celda actual inicio = ActiveCell.Row fin = ActiveCell.CurrentRegion.Rows.Count + _ ActiveCell.CurrentRegion.Row - 1 Range(ActiveCell.EntireColumn.Cells(inicio, 1), _ ActiveCell.EntireColumn.Cells(fin, 1)).Select
•
Selecciona en la región actual las celdas hacia abajo a partir de la celda actual Range(ActiveCell.EntireColumn.Cells(ActiveCell.Row, 1), _ ActiveCell.EntireColumn.Cells(ActiveCell.CurrentRegion.Rows. Count + ActiveCell.CurrentRegion.Row - 1, 1)).Select
_
f. Selección directa de Filas •
Selecciona toda la fila 12 Range("12:12").Select
•
Selecciona todas las filas desde la 7 hasta la 12 Range("7:12").Select
•
Selecciona unicamente las filas 4, 12 y 20 Range("4:4,12:12,20:20").Select
g. Selección indirecta de Filas •
Selecciona toda la fila de la celda actual ActiveCell.EntireRow.Select
•
Selecciona todas las filas del rango seleccionado Selection.EntireRow.Select
Elaborado por: Daniel Zegarra Zavaleta
Pág. 20
h. Para desplazar el puntero de celda:
Uso de la sentencia Offset: Sintaxis: Donde:
•
Activecell.Offset(filas, columnas).Select filas Cantidad de filas que se desplaza hacia abajo, si filas es positivo Cantidad de filas que se desplaza hacia arriba, si filas es negativo columnas Cantidad de columnas que se desplaza hacia la derecha, si columnas es positivo Cantidad de columnas que se desplaza hacia la izquierda, si columnas es negativo
Baja el puntero 5 celdas a partir de la celda B4 Range("B4").Select ActiveCell.Offset(5, 0).Select
•
Baja el puntero 5 celdas a partir de la celda B4 Range("B4").Offset(5, 0).Select
•
Mueve el puntero 2 celdas abajo y 3 a la derecha a partir de la celda B4 Range("B4").Offset(2, 3).Select
Uso de la sentencia While: Sintaxis
While condición intrucciones
Wend Donde: condición
instrucciones
•
Es una expresión numérica o expresión de cadena cuyo valor es Verdadero o Falso. Si condición es Null, condición se considera Falso. Opcional. Una o más instrucciones que se ejecutan mientras la condición sea Verdadera.
Selecciona la primera celda vacía debajo de una columna de datos Range("B4").Select While ActiveCell <> Empty ActiveCell.Offset(1, 0).Activate Wend
•
Selecciona la última celda ocupada hacia abajo en la columna actual While ActiveCell.Row <> 65536 Selection.End(xlDown).Select Wend Selection.End(xlUp).Select
Elaborado por: Daniel Zegarra Zavaleta
Pág. 21
•
Selecciona la ultima celda de la region actual ActiveCell.CurrentRegion.Cells(ActiveCell.CurrentRegion.Rows. Count, ActiveCell.CurrentRegion.Columns.Count).Select
•
_
Selecciona la ultima celda de la region actual (otra forma) With ActiveCell.CurrentRegion .Cells(.Rows.Count, .Columns.Count).Select End With
i. Para borrar rangos de celdas:
Uso de la sentencia Clear, Clear.Contents y Clear.Format: Sintaxis: Donde: •
Referencia.Clear Referencia.ClearContents Referencia.ClearFormats Referencia Es un rango de
celdas
Borra el contenido de la celda actual ActiveCell.ClearContents
•
Borra todo en el rango C4:C7 (Contenido y Formato) Range("C4:C7").Clear
•
Borra el formato del rango llamado CUADRO Range("Cuadro").ClearFormats
j. Para eliminar filas o columnas enteras:
Uso de la sentencia Delete: Sintaxis: Donde: •
Referencia.Delete Es un rango de filas o columnas Referencia
Elimina la columna de la celda actual ActiveCell.EntireColumn.Delete
•
Elimina la fila de la celda actual ActiveCell.EntireRow.Delete
•
Elimina las columnas del rango seleccionado Range("F4:G4").Select Selection.EntireColumn.Delete
•
Elimina las filas del rango seleccionado Range("F4:G4").Select Selection.EntireRow.Delete
Elaborado por: Daniel Zegarra Zavaleta
Pág. 22
k. Para insertar filas o columnas:
Uso de la sentencia Insert: Sintaxis: Donde: •
Referencia.Insert Referencia Es un rango de filas o columnas
Inserta una columna en la celda actual ActiveCell.EntireColumn.Insert
•
Inserta una fila en la celda actual ActiveCell.EntireRow.Insert
•
Inserta varias columnas en el rango seleccionado Range("F4:G4").Select Selection.EntireColumn.Insert
•
Inserta varias filas en el rango seleccionado Range("F4:G4").Select Selection.EntireRow.Insert
l. Para nombrar un rango de celdas: •
Selecciona el rango A4:C10 y le asigna el nombre TABLA Range("A4:C10").Select ActiveWorkbook.Names.Add Name:="TABLA", RefersTo:=Selection
•
Asigna el nombre TABLA al rango A4:C10 ActiveWorkbook.Names.Add Name:="CUADRO", RefersTo:= _ Range("A4:C10")
•
Selecciona la región actual y le asigna el nombre CUADRO ActiveCell.CurrentRegion.Select ActiveWorkbook.Names.Add Name:="CUADRO", RefersTo:=Selection
•
Asigna el nombre CUADRO a la región actual ActiveWorkbook.Names.Add Name:="CUADRO", RefersTo:= _ ActiveCell.CurrentRegion
Elaborado por: Daniel Zegarra Zavaleta
Pág. 23
Ejercicio Nº 2: Procedimientos Sub para seleccionar rangos Vamos a suponer que usted no sabe nada de programación, asi que vamos a crear una serie de macros simples para que realicen varias de las acciones a las cuales estamos acostumbrados a realizar nosotros mismos en la hoja de calculo con el mouse y el teclado.
1.- En una hoja en blanco escriba los cuadros que se muestran en la imagen anterior y luego guarde el archivo con el nombre Muebles. 2.- Déle nombre a los siguientes rangos de celda: A3:C7 Tabla
E3:F7 Precios
B10:D12 Resumen
3.- Ingrese al Editor de Visual Basic con las teclas Alt+F11 y luego inserte una nueva hoja de módulo (Menú Insertar/Módulo). 4.- En la hoja de módulo escriba el siguiente procedimiento Sub:
5.- Regrese a la hoja de cálculo de Excel y seleccione la celda A1.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 24
6.- Para ejecutar ahora la macro presione las teclas Alt+F8, luego en la ventana que aparece elegir la macro Prueba con un clic y a continuación Clic en Ejecutar.
La macro se ejecutará y moverá el puntero a la celda B4:
A continuación presentamos una serie de ejemplos de procedimientos Sub para realizar diversos tipos de selección de celdas. Para poder observar cual es el efecto de cada uno de estos ejemplos, escríbalos en la hoja de modulo anterior debajo del procedimiento Prueba. A medida que los escriba puede nombrar cada procedimiento como Prueba2, Prueba3, etc. A medida que los vaya escribiendo regrese a la hoja de Excel y pruebe ejecutarlos con las teclas Alt+F8 y eligiendo la macro que quiera ejecutar respectivamente. Compare luego sus resultados con las imágenes que aquí se muestran en cada caso.
Ejemplos de procedimientos Sub para seleccionar celdas:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 25
1) Seleccionar la celda B4 Range("B4").Select
2) Seleccionar el rango de celdas A3:C7 Range("A3:C7").Select
3) Seleccionar el rango de celdas A3:C7 y luego convertir a la celda B5 en activa sin perder la selección del rango anterior Range("A3:C7").Select Range("B5").Activate
Nota.-
Para seleccionar un rango de celdas, use el método Select . Para activar sólo una celda, puede utilizar el método Activate. Si se activa una celda que se encuentra dentro del rango seleccionado entonces no se pierde la selección, pero si la celda que se activa está fuera del rango seleccionado la selección se perderá y solo quedará seleccionada la celda activa.
4) Seleccionar el rango de celdas cuyo nombre es Tabla Range("Tabla").Select
5) Seleccionar el rango Tabla y luego seleccionar la primera celda de ese rango. Range("Tabla").Select ActiveCell.Select
6) Seleccionar los rangos Tabla, Precios y Resumen (rangos separados)
Elaborado por: Daniel Zegarra Zavaleta
Pág. 26
Range("Tabla, Precios, Resumen").Select
7) Seleccionar los rangos desde Tabla hasta Resumen (el resultado es un rango mayor que incluye Tabla y Resumen, y todas las celdas que se encuentran entre estos dos rangos separados) Range("Tabla", "Resumen").Select
8) Seleccionar el rango de celdas de la región actual, (Región actual es el rango de las celdas ocupadas que rodean la celda activa.) ActiveCell.CurrentRegion.Select
9) Seleccionar el rango A3:C7 y luego " mover la selección " 2 filas hacia abajo y una columna hacia la derecha Range("A3:C7").Select Selection.Offset(2,1).Select
Elaborado por: Daniel Zegarra Zavaleta
Pág. 27
10) Seleccionar el rango A3:C7 y luego " activar la celda " 2 filas hacia abajo y una columna hacia la derecha dentro del rango seleccionado Range("A3:C7").Select Selection.Offset(2,1).Activate
11) Seleccionar el rango A3:C7 y luego " mover el puntero de celda " 2 filas hacia abajo y una columna hacia la derecha dentro del rango seleccionado Range("A3:C7").Select ActiveCell.Offset(2,1).Select
Elaborado por: Daniel Zegarra Zavaleta
Pág. 28
12) Seleccionar la región actual y luego seleccionar la celda en blanco situada al final de la primera columna de la región actual ActiveCell.CurrentRegion.Select ActiveCell.Offset(Selection.Rows.Count, 0).Select
13) Seleccionar la región actual y luego seleccionar la última celda ocupada al final de la primera columna de la región actual ActiveCell.CurrentRegion.Select ActiveCell.Offset(Selection.Rows.Count - 1, 0).Select
14) Suponiendo una tabla con una fila de encabezado, a continuación se muestran 2 formas para seleccionar la tabla sin seleccionar la fila de encabezados. Debe haber una celda activada en algún lugar de la tabla antes de ejecutar el ejemplo. ActiveCell.CurrentRegion.Select ActiveCell.Offset(1, 0).Resize(Selection.Rows.Count - 1, _ Selection.Columns.Count).Select
ActiveCell.CurrentRegion.Rows(2).Select Range(Selection, ActiveCell.Offset(ActiveCell.CurrentRegion. _ Rows.Count - 2, 0)).Select
Elaborado por: Daniel Zegarra Zavaleta
Pág. 29
La Propiedad End Desplaza el puntero a la celda situada al final de la región que contiene el rango fuente. Equivale a presionar las teclas FIN+FLECHA ARRIBA, FIN+FLECHA ABAJO, FIN+FLECHA IZQUIERDA o FIN+FLECHA DERECHA. Sintaxis: Expresión.End( Dirección)
Donde: Expresión.-
Objeto a partir del cual se realizará el desplazamiento, (por ejemplo: ActiveCell, ó Range("A3"), ó Selection).
Dirección puede ser una de las siguientes constantes:
xlUp xlDown xlToRight xlToLeft
hacia arriba hacia abajo hacia la derecha hacia la izquierda
Ejemplos del uso de la propiedad End: 1) Seleccionar la celda B3 y luego seleccionar la ultima celda ocupada al final de esa columna Range("B3").select ActiveCell.End(xlDown).Select
2) Selecciona la primera celda superior de la columna B, en la región que contiene la celda B6 Range("B6").End(xlUp).Select
3) Selecciona la última celda de la derecha de la fila 4, en la región que contiene la celda A4 Range("A4").End(xlToRight).Select
4) Amplía la selección desde la celda B4 hasta la última celda ocupada hacia la derecha Range("B4", Range("B4").End(xlToRight)).Select
Elaborado por: Daniel Zegarra Zavaleta
Pág. 30
Ejercicio Nº 3: Nombrar rangos, Seleccionar columnas y Borrar 1.- En una hoja en blanco escriba el siguiente cuadro y luego guarde el archivo con el nombre Destinos. 2.- Ingrese al Editor de Visual Basic con las teclas Alt+F11 y luego de insertar una nueva hoja de modulo (Menú Insertar/Módulo) al igual que en el ejercicio anterior, escriba los siguientes procedimientos Sub:
Ejemplos de procedimientos Sub: 1) Definir con el nombre abc al rango seleccionado. (Se supone que previamente se ha seleccionado un rango como B3:E7) ActiveWorkbook.Names.Add Name:="abc", RefersTo:=Selection
2) Definir con el nombre abc a la región actual. (previamente ubicar el puntero de celda en cualquier celda ocupada del cuadro) ActiveWorkbook.Names.Add Name:="abc", RefersTo:=ActiveCell.CurrentRegion Nota.-
Para los dos ejemplos anteriores que nombran un rango como abc , en el primer caso hay que seleccionar el rango y después ejecutar la macro. En el segundo caso basta con que el puntero de celda se encuentre dentro del cuadro y al ejecutar la macro, a todo el cuadro (Región actual) se le dará el nombre de rango.
3) Seleccionar la segunda columna del rango llamado abc Range("abc").Columns(2).Select
4) Seleccionar la segunda columna de la región actual. (Ubicar previamente el puntero en cualquier celda dentro del cuadro)
Elaborado por: Daniel Zegarra Zavaleta
Pág. 31
ActiveCell.CurrentRegion.Columns(2).Select
Nota.-
Este ejemplo es semejante al anterior, con la diferencia que funciona para cualquier cuadro sin importar su tamaño, basta con seleccionar una celda del cuadro y cuando se ejecute la macro se seleccionará solo la 2da columna del cuadro. Observe que la 2da columna del cuadro no es la columna B, sino en este caso la columna C.
5) Seleccionar toda la columna de la celda activa ActiveCell.EntireColumn.Select
6) Seleccionar todas las columnas de la seleccion Selection.EntireColumn.Select
7) Seleccionar todas las columnas de la region actual ActiveCell.CurrentRegion.EntireColumn.Select
8) Seleccionar las 3 columnas a partir de la celda activa. Suponer que la celda activa es la B5. ActiveCell.Columns("A:C").EntireColumn.Select
Nota.-
En este ejemplo la referencia "A:C" es considerada como una referencia relativa, o sea queno indica que se seleccionen las 3 primeras columnas A,B y C de la hoja de calculo, sino que se seleccionen las 3 primeras columnas de la región actual.
9) Seleccionar la 3ra columna a partir de la celda activa. Suponer que la celda activa es la celda B5. ActiveCell.Columns(3).EntireColumn.Select
Elaborado por: Daniel Zegarra Zavaleta
Pág. 32
Nota.-
En este ejemplo siendo B5 la celda activa, al ejecutarse la macro se seleccionará la tercera columna a partir de la columna B.
10) Seleccionar todas las columnas del rango abc Range("abc").Select Selection.EntireColumn.Select
11) Seleccionar las columnas del rango abc y del rango xyz. (rangos separados) Range("abc, xyz").Select Selection.EntireColumn.Select
12) Seleccionar dentro de la región actual la columna de la celda activa. Suponer que la celda activa es la C4. ActiveCell.CurrentRegion.Columns(ActiveCell.Column – ActiveCell _ .CurrentRegion.Column + 1).Select
13) Borrar el contenido del rango C5:D7 Elaborado por: Daniel Zegarra Zavaleta
Pág. 33
Range("C5:D7").ClearContents
m. Para ingresar datos en celdas y rangos de celdas Uso de la Propiedad: Formula Uso de la función: Date Cuando se trabaja en la hoja de cálculo de Microsoft Excel, usualmente hay que seleccionar primero una o varias celdas y a continuación realizar una acción sobre estos rangos, como escribir valores o darles formato. Pero en cambio, en Visual Basic normalmente no es necesario "seleccionar" las celdas antes de modificarlas, bastara únicamente con referirnos a ellas y entonces Visual Basic podrá modificar sus propiedades. Nota.-
Si desea escribir en una celda utilizando Visual Basic, no es necesario seleccionar la celda, sólo necesita devolver el objeto Range y a continuación asignarle el dato que desee, como se muestra en los siguientes ejemplos:
Ejercicio Nº 4: Asignar valores a celdas y rangos 1.- Abra un nuevo libro en blanco, y ubique el puntero en cualquier celda de la Hoja1.
Ejemplos de procedimientos Sub para asignar valores: 1) Escribir el titulo CUENTAS en la celda A1, luego los títulos SERVICIOS y PAGOS en las celdas A3 y B3, y finalmente el número 120 en la celda B4. Range("A1") Range("A3") Range("B3") Range("B4")
= = = =
"CUENTAS" "SERVICIOS" "PAGOS" 120
Nota.- Cuando se asigna un valor a un objeto la asignación va de derecha a izquierda, es decir; el valor escrito a la derecha del signo igual, es asignado al objeto situado a la izquierda.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 34
2) Las siguientes instrucciones realizan de manera equivalente la misma tarea anterior. Observe el uso de la propiedad offset para desplazar la referencia de celda y escribir datos en ella: Range("A1").select ActiveCell = "CUENTAS" ActiveCell.offset(2,0) = "SERVICIOS" ActiveCell.offset(2,1) = "PAGOS" ActiveCell.offset(3,1) = 120
3) Escribir el número 120 en todas las celdas del rango llamado Pagos. (El rango llamado Pagos es B4:B9) 4) Escribir el contenido de la celda B4 multiplicado por 2, en la celda B9 5) Escribir la función SUMA del rango Pagos, en la celda B10, y luego poner en negrita la celda B10. 6) Escribir la fecha actual en la celda C3 Range("Pagos") = 120 Range("B9") = Range("B4")*2 Range("B10").Formula = "=SUM(Pagos)" Range("B10").Font.Bold = True Range("C3") = Date
Elaborado por: Daniel Zegarra Zavaleta
Pág. 35
Nota.-
Cuando se escriben formulas en las instrucciones de Visual Basic, estas formulas deberán estar encerradas entre comillas dobles, los argumentos de las funciones siempre se escribirán separados con comas y además los nombres de las funciones deberán estar escritas tal y como se escribirían en la versión en inglés de Excel, es decir los nombres de función no se escriben como las conocemos en español, sino en su equivalente según la versión original. Por ejemplo:
Nota.-
SUMA
como
SUM
PROMEDIO
como
AVG
CONTAR
como
COUNT
ENTERO
como
INT
BUSCARV
como
VLOOKUP
SI
como
IF
REDONDEAR
como
ROUND
ESBLANCO
como
ISBLANK
Si al escribir alguna formula en Visual Basic no se conoce su equivalente en inglés, lo que hay que hacer es regresar a la ventana de Excel y encender la grabadora de macros, luego escribir la fórmula en español en cualquier celda, apagar la grabadora y observar en la hoja de modulo como ha escrito el editor de Visual Basic su equivalente en la versión en inglés.
n. Usos del método Select y la propiedad Selection El método Select activa las hojas y los objetos de las hojas. La propiedad Selection devuelve un objeto que representa la selección actual de la hoja activa del libro activo. Antes de utilizar la propiedad Selection, debe activar un libro, o activar o seleccionar una hoja y luego a continuación, seleccionar un rango, u otro objeto, con el método Select. La grabadora de macros suele crear una macro que utiliza el método Select y la propiedad Selection. El siguiente procedimiento Sub se creó utilizando la grabadora de macros, y muestra cómo trabajan juntas Select y Selection. Sub Macro1() Range("A3").Select ActiveCell.FormulaR1C1 = "CLIENTE" Range("B4").Select ActiveCell.FormulaR1C1 = "PAGOS" Range("A3:B3").Select Selection.Font.Bold = True End Sub
El siguiente ejemplo en cambio, realiza de manera equivalente la misma tarea anterior, pero sin activar ni seleccionar las celdas. Sub Macro2()
Elaborado por: Daniel Zegarra Zavaleta
Pág. 36
Range("A3") = "CLIENTE" Range("B3") = "PAGOS" Range("A3:B3").Font.Bold = True End Sub
Este segundo ejemplo evidentemente es más simple y a la vez más eficiente que el anterior, pues la macro no pierde tiempo desplazando el puntero de celda en la pantalla para seleccionar ningun rango previamente al ingreso de los datos; la imagen en la pantalla permanece estática y solo se verán que aparecen los datos en las celdas correspondientes.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 37
Ejercicio Nº 5: Procedimientos Sub para Cambio de moneda Caso1: Se desea crear un procedimiento en Visual Basic para convertir soles a su equivalente en dólares. 1.- En una hoja en blanco escriba lo siguiente:
2.- Ingrese al Editor de Visual Basic con Alt+F11 3.- Inserte una hoja de modulo con el menú Insertar/Modulo 4.- En la hoja de modulo escriba el siguiente procedimiento Sub: Sub Dolares() Monto = range("B3") tcambio = range("B4") Range("B5") = Monto / tcambio End Sub
Como puede verse, las instrucciones en este procedimiento hacen lo siguiente: -
El contenido de la celda B3 lo guarda en la variable Monto
-
El contenido de la celda B4 lo guarda en la variable Tcambio
-
Divide el valor de la variable Monto entre la variable Tcambio y el resultado lo guarda en la celda B5.
4.- Regrese a la hoja de cálculo y dibuje un botón como el que se muestra en la figura anterior (use Autoformas/Formas básicas/Bisel) 5.- Asigne la macro Dolares a este botón.
Cuando haga un clic en el botón de la macro Dólares, el procedimiento se ejecutará y aparecerá el resultado en la celda B5. Nota.-
Cuando se ejecuta esta macro, observe que en el contenido de las celdas no existe ninguna fórmula, todos los cálculos se realizaron en Visual Basic y en las celdas solamente aparecen los resultados. Habrá otros casos como ya se verá más adelante en los cuales se va a desear que la macro escriba también formulas en las celdas.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 38
Caso2: Crear otro procedimiento en Visual Basic para convertir dólares a su equivalente en soles. 1.- En la misma hoja de cálculo anterior borre la celda B3 y escriba un monto en la celda B5:
2.- Ingrese a la ventana de Visual Basic y debajo del procedimiento anterior escriba este otro procedimiento Sub: Sub Soles() Monto = range("B5") tcambio = range("B4") Range("B3") = Monto * tcambio End Sub
En esta ocasión, las instrucciones de este procedimiento hacen lo siguiente: -
El contenido de la celda B5 lo guarda en la variable Monto
-
El contenido de la celda B4 lo guarda en la variable Tcambio
-
Multiplica el valor de la variable Monto por la variable Tcambio y el resultado lo guarda en la celda B3.
3.- Regrese a la hoja de cálculo y dibuje otro botón para la macro Soles como se muestra en la figura anterior. 4.- Luego asigne la macro Soles a este segundo botón.
Cuando haga un clic en el botón de la macro Soles, se ejecutará el procedimiento y los dólares de la celda B5 se convertirán a soles que aparecerán en la celda B3.
Caso3: Ahora crear un procedimiento que borre el contenido del rango B3:B5 y luego seleccione la celda B3. 1.- Ingrese a la ventana de Visual Basic y debajo del procedimiento anterior escriba este otro procedimiento Sub:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 39
Sub Borrar() Range("b1:b3").ClearContents Range("b1").Select End Sub
2.- En la hoja de cálculo dibuje otro botón para la macro Borrar como se muestra en la siguiente figura:
3.- Luego asigne la macro Borrar a este botón.
Cuando haga un clic en el botón de la macro Borrar, se borraran las celdas B3, B4 y B5 y se ubicará el puntero de celda en B3.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 40
Ejercicio Nº 6: Procedimientos Sub para Ahorro personal
Caso1: Se desea crear un procedimiento en Visual Basic para controlar los ahorros en una cuenta personal. 1.- En una hoja en blanco escriba lo siguiente:
2.- Nombre los siguientes rangos de celda: B2 Fecha
B3 Anterior
B5 Retiro
B6 Actual
B4 Deposito
2.- Ingrese al Editor de Visual Basic con Alt+F11 3.- Inserte una hoja de modulo con el menú Insertar/Modulo y escriba el siguiente procedimiento Sub: Sub Ahorro() Range("Fecha") = Date Range("Deposito") = InputBox("Ingrese Depósito") Range("Retiro") = InputBox("Ingrese Retiro") Range("Anterior") = Range("Actual") Range("Actual") = Range("Anterior")+Range("Deposito")-Range("Retiro") End Sub
Las instrucciones en este procedimiento hacen lo siguiente:
- Guarda la fecha actual en la celda llamada Fecha - La sentencia InputBox mostrará una ventana solicitando que se ingrese el monto del deposito, y luego almacena este monto en la celda llamada Depósito.
- Luego otra ventana solicitará el monto de retiro el cual se almacena en la celda llamada Retiro. (si no existe un monto de retiro, al aparecer la ventana solicitando el retiro solo se debe presionar Enter o hacer clic en Aceptar)
-
Guarda el valor de la celda llamada Actual en la celda llamada Anterior Calcula el nuevo saldo actual y lo guarda en la celda llamada Actual
4.- Regrese a la hoja de cálculo y dibuje un botón como el que se muestra en la figura anterior (use Autoformas/Formas básicas/Bisel) 5.- Luego asigne la macro Ahorro a este botón.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 41
Cuando haga un clic en el botón de la macro Ahorro, ingrese un monto de depósito y si desea también de retiro, y al aceptar aparecerán los resultados en la hoja de cálculo. Nota.-
Este procedimiento tal y como esta diseñado, una vez que ya se ha ingresado un depósito y nos está solicitando ingresar ahora el retiro, no nos da opción a enmendar el anterior ingreso si es que hubo un error en él. Más adelante en otro ejercicio veremos como insertar instrucciones condicionales que permitan abortar una transacción o continuar ejecutándola.
La macro anterior a medida que se realizan movimientos en la cuenta va calculando el nuevo saldo, pero no lleva un registro de todos los movimientos efectuados. Para poder guardar cada uno de los depósitos o retiros efectuados día tras día, será necesario crear en la misma hoja de cálculo un cuadro adicional de 4 columnas que registre la fecha, los depósitos y retiros, y el saldo final en cada uno de los movimientos efectuados en la cuenta de ahorros. Para ello haga usted lo siguiente: 6.- Escriba en la hoja de cálculo anterior lo siguiente:
7.- Ingrese a la ventana de Visual Basic y al procedimiento anterior agréguele las siguientes instrucciones: Sub Ahorro() Range("Fecha") = Date Range("Deposito") = InputBox("Ingrese Depósito") Range("Retiro") = InputBox("Ingrese Retiro") Range("Anterior") = Range("Actual") Range("Actual")=Range("Anterior")+Range("Deposito")-Range("Retiro") Range("A9").Select ActiveCell.CurrentRegion.Select ActiveCell.Offset(Selection.Rows.Count, 0).Select ActiveCell = Date ActiveCell.Offset(0, 1) = Range("Deposito") ActiveCell.Offset(0, 2) = Range("Retiro") ActiveCell.Offset(0, 3) = Range("Actual") MsgBox ("Su saldo Actual es de " & Range("Actual") & " soles") End Sub
Luego de haber ingresado el depósito o el retiro, y haber calculado el saldo final, las instrucciones adicionales en este procedimiento hacen lo siguiente:
- Primero selecciona la celda A9
Elaborado por: Daniel Zegarra Zavaleta
Pág. 42
-
Selecciona la región actual
- Desplaza el puntero de celda hasta la ultima celda ocupada de la región actual y se ubica en una celda vacía de la columna A.
- En esa celda vacía de la columna A escribe la fecha actual -
Se desplaza una celda a la derecha de A y escribe el monto del depósito
-
Se desplaza dos celdas a la derecha de A y escribe el monto del retiro Se desplaza tres celdas a la derecha de A y escribe el saldo final
- Finalmente muestra un mensaje en pantalla indicando cual es el monto del saldo actual en la cuenta. 8.- Regrese a la hoja de cálculo y haga un clic en el botón de la macro para registrar uno o varios movimientos en la cuenta.
Si la macro funciona como se espera, regrese a la ventana de Visual Basic y agregue al procedimiento los siguientes comentarios con la finalidad de entender mejor cual es la función de cada grupo de instrucciones dentro de la macro. ( Recuerde que los comentarios deben empezar a escribirse con un apóstrofe (‘).) Sub Ahorro() Range("Fecha") = Date 'Solicita datos Range("Deposito") = InputBox("Ingrese Depósito") Range("Retiro") = InputBox("Ingrese Retiro") Range("Anterior") = Range("Actual") 'Calcula el saldo actual Range("Actual") = Range("Anterior")+Range("Deposito")-Range("Retiro") 'Ubica el puntero al final del registro de movimientos Range("A9").Select ActiveCell.CurrentRegion.Select ActiveCell.Offset(Selection.Rows.Count, 0).Select 'Registra los datos ActiveCell = Date ActiveCell.Offset(0, 1) = Range("Deposito") ActiveCell.Offset(0, 2) = Range("Retiro") ActiveCell.Offset(0, 3) = Range("Actual") 'Muestra un mensaje con el saldo actual MsgBox ("Su saldo Actual es de " & Range("Actual") & " soles") End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 43
8. Uso de funciones de hoja de cálculo de Microsoft Excel en Visual Basic Aunque el lenguaje de Visual Basic para aplicaciones tiene una lista propia de funciones disponibles, habrán casos en los cuales se va ha desear que las macros utilicen las funciones de hoja de calculo de Excel, pero no para escribir estas funciones en las celdas, sino para obtener un resultado con ellas y utilizar este resultado dentro del programa en Visual Basic. Se pueden usar la mayoría de las funciones de hoja de cálculo de Microsoft Excel en las instrucciones de Visual Basic.
a. Lista de las funciones de hoja de cálculo que se pueden usar en Visual Basic Buscar Despejar A BuscarH DesvEst Acos Acosh
BuscarV
DesvEstP
Asen Asenoh
C Coef.De.Correl
Desvia2 DesvProm
Atan2 Atanh
Coeficiente.Asime tria
Dias360 DiaSem
B
Coeficiente.R2 Coincidir
Dist.Weibull
BDContar BDContarA BDDesvEst BDDesvEstP BDExtraer BDMax BDMin BDProducto BDPromedio BDSuma BDVar BDVarP
Combinat Contar Contar.Blanco Contar.Si ContarA Cosh Covar Crecimiento Cuartil Curtosis
D
Binom.Crit
DB
Buscar
DDB Decimal
Elaborado por: Daniel Zegarra Zavaleta
Distr.Beta Distr.Beta.Inv Distr.Binom Distr.Chi Distr.Exp Distr.F Distr.F.Inv Distr.Gamma Distr.Gamma.Inv Distr.Hipergeom Distr.Log.Inv Distr.Log.Norm Distr.Norm Distr.Norm.Estand
Pág. 44
Distr.Norm.Estand .Inv
Interseccion.Eje
Pearson
Distr.Norm.Inv Distr.T
Intervalo.Confianz a Jerarquia
Pendiente Percentil
Distr.T.Inv
K.Esimo.Mayor
E
K.Esimo.Menor
Elegir
L
Poisson Potencia
EncontrarB Error.Tipico.XY
Ln Log
Probabilidad Producto
EsErr EsError
Log10
Promedio
M
EsLogico
Max
Pronostico Prueba.Chi
EsNod EsNoTexto
MDeterm Media.Acotada
Prueba.Chi.Inv Prueba.F
EsNumero Espacios
Media.Armo
Prueba.Fisher.Inv
Media.Geom Mediana
Prueba.T Prueba.Z
Min MInversa
R
F
MMult Moda
Fact
Rango.Percentil Redondea.Impar
Moneda
Fisher Fonetico
Redondea.Par
Multiplo.Inferior Multiplo.Superior
Frecuencia
Redondear Redondear.Mas
N
Redondear.Menos Reemplazar
EsTexto Estimacion.Lineal Estimacion.Logari tmica
Permutaciones Pi
Radianes
G
NegBinomDist
Gamma.Ln Grados
NomPropio Normalizacion
H Hallar
NPer Numero.Romano
HallarB
P
I
SenoH
Pago
SLn
Índice
PagoInt PagoPrin
Subtotales Suma
Int.Pago.Dir
Elaborado por: Daniel Zegarra Zavaleta
ReemplazarB Repetir RTD
S
Pág. 45
Suma.Cuadrados
TanH
V
SumaProducto Sumar.Si
Tasa Tendencia
VA Var
SumaX2MasY2 SumaX2MenosY2
Texto Tir
VarP
SumaXMenosY2 Sustituir
TirM Transponer
SYD
U
T
Vdb VF VNA
USDollar
Importante: Tenga en cuenta que en Visual Basic, el nombre de la función debe escribirse en su equivalente en inglés. Nota.-
Algunas funciones de hoja de cálculo no tienen utilidad en Visual Basic. Por ejemplo, la función Concatenar no se necesita, ya que en Visual Basic puede usar el operador de concatenación & para unir varios valores de texto..
b. Como llamar a una función de hoja de cálculo desde Visual Basic Cuando se desee usar una funciones de hoja de calculo en Visual Basic, esta función deberá ejecutarse mediante el objeto WorksheetFunction. El siguiente procedimiento Sub usa la función MÍN para obtener el valor más pequeño de un rango de celdas. Primeramente, se declara la variable CUADRO como un objeto Range, y a continuación se la asigna como el rango A1:C10. Luego a la variable MINIMO se le asigna el resultado de aplicar la función MÍN a CUADRO. Finalmente, el valor de la variable MINIMO es utilizada para obtener un cálculo y escribirlo en la celda A12. Sub UsarFuncion() Dim CUADRO As Range Set CUADRO = Range("A1:C10") MINIMO = Application.WorksheetFunction.Min(CUADRO) Range("A12") = MINIMO * 100 End Sub
Otra manera más simple de obtener el mismo resultado que la macro anterior sería de la siguiente forma: Sub OtraFuncion() Range("A12") = Application.WorksheetFunction.Min(Range("A1:C10"))*100 End Sub
Si usa una función de hoja de cálculo que requiere como argumento una referencia de rango, deberá especificar un objeto Range. Por ejemplo, puede usar la función de hoja de cálculo BUSCARV para efectuar una búsqueda en un rango de celdas.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 46
En una celda de hoja de cálculo, podría insertar una fórmula como =BUSCARV(4,A1:B10,2,0). No obstante, en un procedimiento de Visual Basic, para obtener el mismo resultado debe especificar un objeto Range para referirse al rango A1:B10. En el siguiente ejemplo, el procedimiento Sub BuscarDato asigna a la variable RPTA el resultado de la función VLOOKUP (que es el nombre en inglés de la función BUSCARV) y luego muestra en pantalla un mensaje con el valor de la variable RPTA. Sub BuscarDato() RPTA = Application.WorksheetFunction.VLOOKUP(4,Range("A1:B10"),2,0) MsgBox RPTA End Sub Nota.-
Las funciones de Visual Basic no usan el calificador WorksheetFunction. Una función de Visual Basic puede tener el mismo nombre que una función de Microsoft Excel y, sin embargo, dar otros resultados. Por ejemplo, Application.WorksheetFunction.Log, y la función Log dan resultados diferentes.
c. Insertar una función de hoja de cálculo en una celda En cambio, si lo que se quiere es que la macro escriba un función de hoja de cálculo en una celda, entonces habrá que especifique la función como el valor de la propiedad Formula del objeto Range correspondiente. En el siguiente ejemplo el procedimiento Sub InsertarFormulas, escribirá en varias celdas del la Hoja2, diversas funciones de hoja de calculo: Sub InsertarFormulas() Worksheets("Hoja2").Activate . Range("A3:A5").Formula = "=RAND()" Range("A6").Formula = "=SUM(A3:A5)" Range("A7").Formula = "=AVG(A3:A5)" Range("A8").Formula = "=COUNT(A3:A5)" End Sub
El equivalente de la función
ALEATORIO
es
RAND
SUMA
es
SUM
PROMEDIO
es
AVG
CONTAR
es
COUNT
d. La Función InputBox Muestra un mensaje en un cuadro de diálogo, espera que el usuario escriba un texto o haga clic en un botón y devuelve el dato escrito
Elaborado por: Daniel Zegarra Zavaleta
Pág. 47
Si el usuario hace clic en Aceptar o presiona Enter , la función InputBox devuelve lo que haya escrito en el cuadro de texto como un dato tipo String (texto). Si el usuario hace clic en Cancelar, la función devuelve una cadena de caracteres de longitud cero ("").
Sintaxis InputBox (Mensaje , titulo, defecto, xpos, ypos, ayuda, contexto ) Donde: Mensaje
titulo
defecto
xpos
ypos
ayuda
contexto
Nota.-
Obligatorio. Texto que se muestra como mensaje en el cuadro de diálogo. Si mensaje consta de más de una línea, puede separarlos utilizando un carácter de retorno de carro Chr(13), un carácter de avance de línea Chr(10) o una combinación de los caracteres de retorno de carro-avance de línea Chr(13) y Chr(10) entre cada línea y la siguiente. Opcional. Texto que se muestra en la barra de título del cuadro de diálogo. Si omite titulo, en la barra de título se coloca el nombre de la aplicación Excel Opcional. Texto que se muestra en el cuadro de texto como respuesta predeterminada cuando no se suministra una cadena. Si omite defecto, se muestra el cuadro de texto vacío. Opcional. Numero que especifica, en pixels, la distancia en sentido horizontal entre el borde izquierdo del cuadro de diálogo y el borde izquierdo de la pantalla. Si se omite xpos, el cuadro de diálogo se centra horizontalmente. Opcional. Expresión numérica que especifica, en pixels, la distancia en sentido vertical entre el borde superior del cuadro de diálogo y el borde superior de la pantalla. Si se omite ypos, el cuadro de diálogo se coloca a aproximadamente un tercio de la altura de la pantalla. Opcional. Texto que identifica el archivo de Ayuda que se utilizará para proporcionar ayuda interactiva para el cuadro de diálogo. Si se especifica ayuda, también deberá especificarse contexto. Opcional. Expresión numérica que es el número de contexto de Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se especifica contexto, también deberá especificarse ayuda.
Si desea especificar más que el primer argumento con nombre, debe utilizar InputBox en una expresión. Si desea omitir algunos argumentos de posición, debe incluir los delimitadores de coma correspondiente. Inputbox("Ingrese nombre:", ,"Desconocido")
e. El Método InputBox Muestra un cuadro de diálogo para que el usuario introduzca información. Devuelve la información introducida en el cuadro de diálogo.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 48
Sintaxis: expresión.InputBox (Mensaje, titulo, defecto, xpos, ypos, ayuda, contexto, tipo ) Donde: expresión Mensaje
Title Defecto
xpos ypos Ayuda Contexto Tipo
Expresión obligatoria que asigna un objeto Application. Dato obligatorio que se mostrará en el cuadro de diálogo. Puede ser un texto, un número, una fecha o un valor Boolean (Excel convierte el dato en texto antes de que muestre). Opcional . Tiítulo del cuadro de entrada. Si este argumento se omite, el título predeterminado será "Entrada". Opcional. Especifica un valor que aparecerá en el cuadro de texto cuando se muestre inicialmente el cuadro de diálogo. Si este argumento se omite, el cuadro de texto permanecerá vacío. Este valor puede ser un objeto Range. Opcional. Especifica la posición X del cuadro de diálogo con respecto a la esquina superior izquierda de la pantalla, en puntos. Opcional. Especifica la posición Y del cuadro de diálogo con respecto a la esquina superior izquierda de la pantalla, en puntos. Opcional. El nombre del archivo de Ayuda para este cuadro de entrada. Opcional. La identificación de contexto del tema de Ayuda. Opcional. Especifica el tipo de datos que se devuelve. Si este argumento se omite, el cuadro de diálogo devolverá texto. Puede ser uno de los siguientes valores o bien una suma de ellos.
Valor 0 1 2 4 8 16 64
Significado Una fórmula Un número Texto (una cadena) Un valor lógico (True o False) Una referencia a una celda, como un objeto Range. Un valor de error, como por ejemplo #N/A Una matriz de valores
Es posible usar una suma de valores permitidos para Tipo. Por ejemplo, para que un cuadro de entrada acepte texto o números, establezca Tipo como 1 + 2. Use InputBox para mostrar un cuadro de diálogo sencillo que permite introducir información para usarla en una macro. El cuadro de diálogo tiene un botón Aceptar y un botón Cancelar. Si elige el botón Aceptar, InputBox devolverá el valor introducido en el cuadro de diálogo. Si elige el botón Cancelar, InputBox devolverá False. Si Type es 0, InputBox devolverá la fórmula en forma de texto, por ejemplo, "=2*PI()/360". Si existen referencias en la fórmula, se devolverán como referencias de estilo A1. (Utilice ConvertFormula para realizar conversiones entre estilos de referencia). Si Type es 8, InputBox devolverá un objeto Range. Debe usar el enunciado Set para asignar el resultado a un objeto Range, como se muestra en el ejemplo siguiente:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 49
Set TABLA = Application.InputBox("Ejemplo", type := 8)
Si no usa el enunciado Set, se asignará a la variable el valor contenido en el rango y no el objeto Range mismo. Conclusión: El método InputBox difiere de la función InputBox en que el primero permite la validación selectiva de las entradas del usuario y en que puede usarse con objetos, valores de error y fórmulas de Excel. Tenga en cuenta que Application.InputBox llama al método InputBox, y el dato que se escriba puede ser considerado de diferentes tipos (texto, numero, formula, etc); en cambio InputBox sin calificador de objeto llama a la función InputBox, y el dato escrito será considerado siempre como del tipo texto.
Ejemplos En este ejemplo se solicita un número al usuario. EDAD = Application. InputBox ("Escriba su edad:")
En este otro ejemplo se solicita al usuario que seleccione una celda de la Hoja1. Se usa el argumento Type para asegurar que al hacer clic en una celda, se considere como que se hubiese escrito la coordenada de esta celda con el teclado. Worksheets("Hoja1").Activate Set SUELDO = Application.InputBox("Seleccione su sueldo", Type:=8)
Elaborado por: Daniel Zegarra Zavaleta
Pág. 50
Ejercicio Nº 7 - Pago de un préstamo hipotecario En este ejemplo se usa la función de hoja de cálculo PAGO para calcular el pago mensual de un préstamo hipotecario.
1ra Solución: 1.- En la Hoja1 de un nuevo libro escribir los siguientes datos que se muestran en la imagen adjunta. 2.- Luego, en la celda B7 escribir la función PAGO siguiente: =PAGO(B3/1200,B4,-B5) Interés
Monto del préstamo
Número de pagos
3.- Guarde el archivo archivo con el el nombre Pago de Hipoteca .
2da Solución: Ahora, el mismo caso anterior se va ha resolver pero utilizando íntegramente un procedimiento Sub. Sub. Es decir no se necesitarán necesitarán en absoluto absoluto datos de de ninguna celda. celda. 1.- Ingresar al Editor de Visual Basic con Alt+F11 y luego inserte una hoja de módulo con el menú Insertar/Modulo. 2.- En la hoja de módulo escriba las siguientes siguientes instrucciones: Sub PagoMensual() PagoMensual() Interes = Val(InputBox("Ingrese el Interés:")) Periodos = Val(InputBox("Ingrese los Periodos:")) Prestamo = Val(InputBox("Ingrese Val(InputBox("Ingrese el Préstamo:")) Préstamo:")) Pago = Application.WorksheetFunction.Pmt(Interes/1200, _ Periodos,-Prestamo) MsgBox ("El Pago mensual mensual es de: " & Format(Pago, Format(Pago, "Currency")) "Currency")) End Sub
Como la función Inputbox devuelve datos tipo texto al escribir el Interés, los Períodos o el Préstamo, entonces, se le antepone la función Val para para convertir esos datos en números, y así poder operarlos matemáticamente con la función Pago (que en ingles su equivalente es Pmt )
3.- Con Autoformas/Formas básicas/Bisel dibuje un botón en la hoja de calculo y asígnele la macro PagoMensual. Elaborado por: Daniel Zegarra Zavaleta
Pág. 51
Cuando la macro se ejecute mostrará las siguientes ventanas en la pantalla, en las cuales en cada caso se deberá escribir los datos que se solicitan y hacer clic en el botón Aceptar:
4.- Guarde nuevamente nuevamente el archivo con con Ctrl+G. En conclusión, como puede verse, Excel puede resolver el mismo problema de dos formas distintas: •
En el primer caso, calcula el pago mensual de la hipoteca escribiendo y calculando los datos en el interior de las celdas de la hoja de cálculo.
En el segundo caso, realiza el mismo calculo pero ingresando y mostrando los resultados íntegramente en el ambiente de Visual Basic, sin utilizar en absoluto las celdas de la hoja de cálculo. Habrán otros casos como hemos visto ya, en los cuales para resolver los problemas es necesario utilizar ambos ambientes en forma combinada, es decir; usar los datos y cálculos existentes en las celdas, y también los datos y cálculos provenientes de las instrucciones de Visual Basic. •
3ra Solución: Una tercera forma de ingresar los datos para el calculo del pago de la hipoteca es haciendo uso del Método Inputbox, en vez de la Función Inputbox . 1.- Ingresar al Editor de Visual Basic con Alt+F11 y en la hoja de módulo escriba escriba las siguientes instrucciones:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 52
Sub OtroPago() Interes = Application.InputBox("Seleccione el Interés:") Periodos = Application.InputBox("Seleccione los Periodos:") Prestamo = Application.InputBox("Seleccione el Préstamo:") Pago = Application.WorksheetFunction.Pmt(Interes / 1200, _ Periodos, -Prestamo) MsgBox ("El Pago mensual mensual es de: " & Format(Pago, Format(Pago, "Currency")) "Currency")) End Sub
En este caso el método Interés = Application.Inputbox trata al dato que uno escribe, Application.Inputbox trata directamente como del tipo numérico, ya no como texto. Por esta razón ya no es necesario usar la función Val .
2.- Luego asigne esta macro macro al mismo botón de autoformas del caso caso anterior. Cuando la macro se ejecute y aparezcan las ventanas para introducir datos, se podrán escribir los datos o sino también se podrá seleccionar con el mouse las celdas que contienen los datos que se solicitan y hacer luego clic en el botón Aceptar:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 53
9. Funciones propias de Visual Basic a. Lista breve de las funciones más comunes
Val
Convierte los números contenidos en una cadena como un valor numérico del tipo adecuado. Por ejemplo, Val("15 años"), da como respuesta el número: 15
Str
Convierte en un tipo texto (String) la representación de cadena de un número. Por ejemplo, Str(15) & "años", da como respuesta el texto: 15 años
Left
Extrae un número especificado de caracteres del lado izquierdo de una cadena. Por ejemplo, Left("Limatambo",4), da como respuesta el texto: Lima.
Right
Extrae un número especificado de caracteres del lado derecho de una cadena. Por ejemplo, Rigth("Limatambo",5), da como respuesta el texto: tambo.
Mid
Extrae un numero especificado de caracteres de la parte interior de una cadena. Por ejemplo, Mid("Limatambo",3,4), da como respuesta el texto: mata.
Int, Fix
Las funciones Int y Fix eliminan la fracción de un número y devuelven el valor entero resultante. La diferencia entre Int y Fix es que si el número es negativo, Int devuelve el primer entero negativo menor o igual a número, mientras que Fix devuelve el primer entero negativo mayor o igual a número. Por ejemplo, Int(-8.4) da como respuesta: -9, Y en cambio Fix(-8.4) da como respuesta: -8.
Abs
Devuelve el valor absoluto de un número o expresión de cálculo Por ejemplo, Abs(3-7) da como respuesta: 4
Sgn
Devuelve el número 1,0,ó -1 que indica el signo de un número. Por ejemplo, Sgn(34) da como respuesta 1
Sgn(0) da como respuesta 0 Sgn(-23) da como respuesta -1 Len
Da como resultado la cantidad de caracteres que tiene una cadena de texto. Por ejemplo, Len("Limatambo") da como respuesta el número: 9
Round
Redondea un número a una cantidad especificada de lugares decimales.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 54
Por ejemplo, Round(3.1415927,4) da como respuesta el número: 3.1416
Date
Obtiene la fecha actual del sistema. Por ejemplo, si hoy fuera el día de la primavera, Date daría como respuesta: 23/09/2009
Timer
Obtiene el número de segundos transcurridos desde la medianoche.
Hour
Obtiene un número entero entre 0 y 23, inclusive, que representa la hora del argumento de la función. Por ejemplo, Hour(3:15:27) da como respuesta: 3
Now
Obtiene un número que especifica la fecha y hora actuales de acuerdo con la configuración de la fecha y la hora del sistema de su equipo. Por ejemplo, Now da como respuesta: 23/09/2009 3:15:27
Day
Obtiene un número entero entre 1 y 31, inclusive, que representa el día del mes. Por ejemplo, Day(Now) da como respuesta: 23
Minute
Obtiene un número entero entre 0 y 59, inclusive, que representa el minuto de la hora actual del sistema. Por ejemplo, Minute(Now) da como respuesta: 15
Second
Obtiene número entero entre 0 y 59, inclusive, que representa los segundos de la hora actual del sistema. Por ejemplo, Second (Now) da como respuesta: 27
Year
Obtiene un número entero que representa el año actual del sistema. Por ejemplo, Year(Now) da como respuesta: 2009
Format
formatea un dato de acuerdo a las instrucciones contenidas en una expresión de formato. Por ejemplo:
Pago = 3562.4 Z = Format(Pago, "Currency") Y = Format(Pago, "#,##0.00")
Entonces Z será igual a: S/. 3,562.40 En cambio Y será igual a: 3,562.40
Elaborado por: Daniel Zegarra Zavaleta
Pág. 55
10. Estructuras de Control en las instrucciones macro f. Que son las sentencias de control Mediante el uso de instrucciones condicionales (como IF o Select), e instrucciones de bucle (como While, For, For each, o Do), también conocidas como estructuras de control, es posible escribir código de Visual Basic que tome decisiones y repita determinadas acciones. Otra estructura de control útil es la instrucción With, permite ejecutar una serie de instrucciones sin necesidad de recalificar un objeto. Entonces las sentencias de control pueden ser de varias tipos: Instrucciones Condicionales Instrucciones de Bucle o de lazo repetitivo Instrucciones de ejecución múltiple sobre un mismo objeto g. Que hacen las Instrucciones Condicionales •
If...Then...Else:
Salta a una u otra instrucción cuando una condición es verdadera o Falsa
•
Select Case:
Selecciona la instrucción a ejecutar en función de un conjunto de condiciones
h. Que hacen las Instrucciones de Bucle Empleando bucles es posible ejecutar un grupo de instrucciones de forma repetida. Algunos bucles repiten las instrucciones hasta que una condición es Falsa, otros las repiten hasta que la condición sea Verdadera. Hay también bucles que repiten un conjunto de instrucciones un número determinado de veces o una vez para cada objeto de una colección. •
Do...Loop:
Sigue en el bucle mientras o hasta que una cierta condición sea verdadera .
•
For...Next:
Utiliza un contador para ejecutar un grupo de iinstrucciones un número determinado de veces.
•
For Each...Next:
Repite un grupo de instrucciones para cada uno de los objetos de una colección.
i. Que hacen las Instrucciones de ejecución múltiple Normalmente, en Visual Basic, debe especificarse un objeto antes de poder ejecutar uno de sus métodos o cambiar una de sus propiedades. Se puede usar la instrucción With para especificar un objeto una sola vez y poder aplicar sobre ella una serie completa de instrucciones. •
With:
Ejecuta una serie de instrucciones sobre un mismo objeto sin necesidad de recalificar dicho objeto
Elaborado por: Daniel Zegarra Zavaleta
Pág. 56
11. La Instrucción If...Then...Else Ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una expresión.
Sintaxis If condición Then instrucciones Else instrucciones_else Puede utilizar la siguiente sintaxis en formato de bloque: If condición Then Instrucciones… ElseIf condición-n Then instrucciones_elseif...
Else instrucciones_else End If Donde: condición
instrucciones
Requerido. Uno o más de los siguientes dos tipos de expresiones: Una expresión numérica o expresión de cadena que puede ser evaluada como Verdadera o Falsa. Si condición es Null, condición se considera Falsa. Opcional en formato de bloque; se requiere en formato de línea sencilla que no tenga una cláusula Else. Una o más instrucciones separadas por dos puntos ejecutados si la condición es Verdadera.
condición-n Opcional. Igual que condición. instrucciones_elseif Opcional. Una o más instrucciones ejecutadas si la condición-n asociada es Verdadera. instrucciones_else Opcional. Una o más instrucciones ejecutadas si ninguna de las expresiones anteriores condición o condición-n es Verdadera.
Puede utilizar la forma de una sola línea (Sintaxis 1) para pruebas cortas y sencillas. Sin embargo, el formato de bloque (Sintaxis 2) proporciona más estructura y flexibilidad que la forma de línea simple y, generalmente, es más fácil de leer, de mantener y de depurar.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 57
Nota.-
Con la sintaxis1 es posible ejecutar múltiples instrucciones como resultado de una decisión If...Then, pero todas deben estar en la misma línea y separadas por dos puntos, como en la instrucción siguiente:
If N > 1 Then A = N * 2 : B = B + N : C = C - N
Una instrucción con formato de bloque If debe ser la primera de la línea. Las partes Else, ElseIf y End If, de la instrucción, solamente pueden ir precedidas de un número de línea o una etiqueta de línea. El bloque If debe terminar con una instrucción End If. Para determinar si una instrucción If es un bloque, examine lo que sigue a la palabra clave Then. Si lo que aparece detrás de Then en la misma línea no es un comentario, la instrucción se considera como una instrucción If de una sola línea. Las cláusulas Else y ElseIf son opcionales. Puede tener en un bloque ElseIf, tantas cláusulas If como desee, pero ninguna puede aparecer después de una cláusula Else. Las instrucciones de bloque If se pueden anidar; es decir, unas pueden contener a otras. Cuando se ejecuta un bloque If (Sintaxis 2), se prueba condición. Si condición es Verdadera, se ejecutan las instrucciones que están a continuación de Then. Si condición es False, se evalúan una a una las condiciones ElseIf (si existen). Cuando se encuentra una condición Verdadera se ejecutan las instrucciones que siguen inmediatamente a la instrucción Then asociada. Si ninguna de las condiciones ElseIf es Verdadera (o si no hay cláusulas ElseIf), se ejecutan las instrucciones que siguen a Else. Después de la ejecución de las instrucciones que siguen a Then o Else, la ejecución continúa con la instrucción que sigue a End If. a. Como usar las instrucciones If...Then...Else Se puede usar la instrucción If...Then...Else para ejecutar una instrucción o bloque de instrucciones determinadas, dependiendo del valor de una condición. b. Ejecutar una sola instrucción cuando la condición es Verdadera Para ejecutar una sola instrucción cuando una condición es Verdadera, se puede usar la sintaxis de línea única de la instrucción If...Then...Else. El siguiente ejemplo muestra la sintaxis de línea única, en la que se omite el uso de la (Nota: las fechas se escriben entre numerales #) palabra clave Else: Sub Cumpleaños() MiCumple = #23/8/2009# If MiCumple > Now Then msgbox "Aún falta para mi cumpleaños" End Sub
Para ejecutar más de una línea de código, es preciso utilizar la sintaxis de múltiples líneas. Esta sintaxis incluye la instrucción End If, tal y como muestra el siguiente ejemplo:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 58
Sub HombreMujer() If Range("Sexo") = "F" Then Range("Sexo").Font.ColorIndex = 3 Range("Sexo").Font.Bold = True Range("Sexo").Font.Italic = True End If End Sub
Letra Roja, Negrita y Cursiva
c. Ejecutar unas instrucciones si la condición es Verdadera y ejecutar otras si es Falsa Use una instrucción If...Then...Else para definir dos bloques de instrucciones ejecutables: un bloque que se ejecutará cuando la condición es Verdadera y el otro que se ejecutará si la condición es Falsa. Sub HombreMujer() If Range("Sexo") = "F" Then Range("Sexo").Font.ColorIndex = 3 Range("Sexo").Font.Bold = True Range("Sexo").Font.Italic = True Else Range("Sexo").Font.ColorIndex = 5 Range("Sexo").Font.Bold = False Range("Sexo").Font.Italic = False End If End Sub
Letra Roja, Negrita y Cursiva
Letra Azul, sin Negrita ni Cursiva
d. Comprobar una segunda condición si la primera condición es Falsa Se pueden añadir instrucciones ElseIf a una instrucción If...Then...Else para comprobar una segunda condición si la primera es Falsa. Por ejemplo, el siguiente procedimiento función calcula una bonificación salarial dependiendo de la clasificación del trabajador. La instrucción que sigue a la instrucción Else sólo se ejecuta cuando las condiciones de todas las restantes instrucciones If y ElseIf son Falsas. Sub Remuneracion() Sueldo = Range("C4") If Sueldo < 1500 Then Aumento = Sueldo * 0.20 ElseIf Sueldo < 2000 Then Aumento = Sueldo * 0.15 ElseIf Sueldo < 3000 Then Aumento = Sueldo * 0.10 Else Aumento = Sueldo * 0.05 End If Range("C5") = Aumento End Sub
Las instrucciones If...Then...Else se pueden anidar en tantos niveles como sea necesario. Sin embargo, para hacer más legible el código quizás sea aconsejable
Elaborado por: Daniel Zegarra Zavaleta
Pág. 59
utilizar una instrucción Select Case en vez de recurrir a múltiples niveles de instrucciones If...Then...Else anidadas.
12. La Instrucción While...Wend Ejecuta una serie de instrucciones mientras una condición dada sea True. Sintaxis While condición intrucciones
Wend Donde: condición
instrucciones
Requerido. Expresión numérica o expresión de cadena cuyo valor es Verdadero o Falso. Si condición es Null, condición se considera Falso. Opcional. Una o más instrucciones que se ejecutan mientras la condición es Verdadera.
Si condición es Verdadera, todas las instrucciones se ejecutan hasta que se encuentra la instrucción Wend. Después, el control vuelve a la instrucción While y se comprueba de nuevo la condición. Si la condición es aún Verdadera, se repite el proceso. Si no es Verdadera, la ejecución se reanuda con la instrucción que sigue a la instrucción Wend. Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con el While más reciente. Nota.-
A diferencia de While...Wend, la instrucción Do...Loop proporciona una manera más flexible y estructurada de realizar los bucles.
La siguiente macro busca a partir de la celda B3 hacia abajo una celda que se encuentre vacía. Sub BuscaBlanco() Range("B3").select While ActiveCell <> Empty ActiveCell.Offset(1,0).Activate Wend End Sub
13. La Instrucción For...Next Repite un grupo de instrucciones un número especifico de veces. Sintaxis For contador = principio To fin Step incremento
Elaborado por: Daniel Zegarra Zavaleta
Pág. 60
instrucciones
Exit For instrucciones Next contador Donde:
contador
principio fin incremento
instrucciones
Requerido. Variable numérica que se utiliza como contador de bucle. La variable no puede ser Booleana (Verdadero o Falso) ni un elemento de matriz. Requerido. Valor inicial del contador. Requerido. Valor final del contador. Opcional. Cantidad en la que cambia el contador cada vez que se ejecuta el bucle. Si no se especifica, el valor predeterminado de incremento es uno. Opcional. Una o más instrucciones entre For y Next que se ejecutan un número especificado de veces.
El argumento incremento puede ser positivo o negativo. El valor del argumento incremento determina la manera en que se procesa el bucle, como se muestra a continuación:
Valor
El bucle se ejecuta si
Positivo o 0
contador <= fin
Negativo
contador >= fin
Una vez que se inicia el bucle y se han ejecutado todas las instrucciones en el bucle, incremento se suma a contador. En este punto, las instrucciones del bucle se pueden ejecutar de nuevo (si se cumple la misma prueba que causó que el bucle se ejecutara inicialmente) o bien se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next. Sugerencia Cambiar el valor de contador mientras está dentro de un bucle hace difícil su lectura y depuración. Se pueden colocar en el bucle cualquier número de instrucciones Exit For como una manera alternativa de salir del mismo. La instrucción Exit For, que se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then), transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next. Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para ello, proporcione a cada bucle un nombre de variable único para su contador. La siguiente construcción es correcta: For Pais = 1 To 5
Elaborado por: Daniel Zegarra Zavaleta
Pág. 61
For Ciudad = 1 To 3 For Distrito = 1 To 10 ... ... Next Distrito Next Ciudad Next Pais Nota--
Si omite mencionar un contador en una instrucción Next, la ejecución continúa como si este se hubiera incluido. En cambio si se produce un error si se encuentra una instrucción Next antes de su instrucción For correspondiente.
a. Como usar las instrucciones For...Next Las instrucciones For...Next se pueden utilizar para repetir un bloque de instrucciones un número determinado de veces. Los bucles For usan una variable contador cuyo valor se aumenta o disminuye cada vez que se ejecuta el bucle. El siguiente procedimiento hace que el equipo emita un sonido 50 veces. La instrucción For determina la variable contador x y sus valores inicial y final. La instrucción Next incrementa el valor de la variable contador en 1. Sub Bips() For x = 1 To 50 Beep Next x End Sub
Mediante la palabra clave Step, se puede aumentar o disminuir la variable contador en el valor que se desee. En el siguiente ejemplo TotalPares, la variable contador N se incrementa en 2 cada vez que se repite la ejecución del bucle. Cuando el bucle deja de ejecutarse, Total representa la suma de 2, 4, 6, 8 y 10. Sub TotalPares() For Num = 2 To 10 Step 2 Total = Total + Num Next Num MsgBox "El total es " & Total End Sub
Para disminuir la variable contador utilice un valor negativo en Step. Para disminuir la variable contador es preciso especificar un valor final que sea menor que el valor inicial. En el siguiente ejemplo OtroTotal, la variable contador Cant se disminuye en 2 cada vez que se repite el bucle. Cuando termina la ejecución del bucle, Total representa la suma de 16, 14, 12, 10, 8, 6, 4 y 2. Sub OtroTotal() For Cant = 16 To 2 Step -2 Total = Total + Cant Next Cant MsgBox "El total es " & total End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 62
Nota.-
En realidad no es necesario incluir el nombre de la variable contador después de la instrucción Next . En los ejemplos anteriores, el nombre de la variable contador se ha incluido solo para facilitar la lectura del código y poder identificar así donde empieza el bucle For y donde termina. Esto de usar nombre del contador después de la instrucción Next es de mayor utilidad cuando existen varias instrucciones For…Next anidadas.
Se puede abandonar una instrucción For...Next antes de que el contador alcance su valor final, para ello se utiliza la instrucción Exit For. Por ejemplo, si se produce un error se puede usar la instrucción Exit For en el bloque de instrucciones Verdadero de una instrucción If...Then...Else o Select Case que detecte específicamente ese error. Si el error no se produce, la instrucción If…Then…Else es False y el bucle continuará ejecutándose normalmente.
14. La Instrucción Select Case Ejecuta uno de varios grupos de instrucciones, dependiendo del valor de una expresión. Sintaxis Select Case expresión_prueba
Case lista_expresion-n instrucciones-n... Case Else instrucciones_else End Select Donde: expresión_prueba
lista_expresión-n
Requerido. Es cualquier expresión numérica o expresión de cadena. Requerido si aparece la palabra clave Case. Lista delimitada por comas de una o más de las formas siguientes: expresión, expresión To expresión, Is operador_de_comparación expresión. La palabra clave especifica un intervalo de valores. Si se utiliza la palabra clave To, el valor menor debe aparecer antes de To. Utilice la palabra clave Is con operadores de comparación para especificar un intervalo de valores. Si no se escribe, la palabra clave Is se insertará automáticamente.
instrucciones-n
Opcional. Una o más instrucciones ejecutadas si expresión_prueba coincide con cualquier parte de lista_expresión-n.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 63
instrucciones_else
Opcional. Una o más instrucciones que se ejecuten si expresión_prueba no coincide con ninguna de las cláusulas Case.
Si expresión_prueba coincide con cualquier lista_expresión asociada con una cláusula Case, las instrucciones que siguen a esa cláusula Case se ejecutan hasta la siguiente cláusula Case o, para la última cláusula, hasta la instrucción End Select. El control pasa después a la instrucción que sigue a End Select. Si expresión_prueba coincide con una expresión de lista_expresión en más de una cláusula Case, sólo se ejecutan las instrucciones que siguen a la primera coincidencia. La cláusula Case Else se utiliza para indicar las instrucciones que se van a ejecutar si no se encuentran coincidencias entre expresión_prueba y una lista_expresión en cualquiera de las otras selecciones de Case. Aunque no es necesario, es buena idea tener una instrucción Case Else en el bloque Select Case para controlar valores imprevistos de expresión_prueba. Cuando no hay una instrucción Case Else y ninguna expresión de la lista en las cláusulas Case coincide con la expresión de prueba, la ejecución continúa en la instrucción que sigue a End Select . Se pueden utilizar expresiones múltiples o intervalos en cada cláusula Case. Por ejemplo, la línea siguiente es válida:
Case 1 To 4, 7 To 9, 11, 17, Is > Grande
Nota.- El operador de comparación Is no es lo mismo que la palabra clave Is utilizada en la instrucción Select Case .
También puede especificar intervalos y expresiones múltiples para cadenas de caracteres. En el siguiente ejemplo, Case coincide con las cadenas que son exactamente carnes , cadenas que están entre nueces y sopa en orden alfabético y el valor actual de la variable Fruta
Case "carnes", "nueces" To "sopa", Fruta
Las instrucciones Select Case se pueden anidar. Cada instrucción Select Case debe tener su correspondiente instrucción End Select.
a. Como usar la instruccion Select Case La instrucción Select Case se utiliza como alternativa a las instrucciones ElseIf en instrucciones If...Then...Else cuando se compara una expresión con varios valores diferentes. Mientras que las instrucciones If...Then...Else pueden comparar una Elaborado por: Daniel Zegarra Zavaleta
Pág. 64
expresión distinta para cada instrucción ElseIf, la instrucción Select Case compara únicamente la expresión que evalúa al comienzo de la estructura de control. En el siguiente ejemplo, la instrucción Select Case evalúa el argumento rendimiento que se pasa al procedimiento. Observe que cada instrucción Case puede contener más de un valor, una gama de valores, o una combinación de valores y operadores de comparación. La instrucción opcional Case Else se ejecuta si la instrucción Select Case no encuentra ninguna igualdad con los valores de la instrucciones Case. Sub Pago() Sueldo = Range("C4") Select Case Sueldo Case Is <1500 Aumento = Sueldo Case Is <2000 Aumento = Sueldo Case Is <3000 Aumento = Sueldo Case 3000 To 4000 Aumento = Sueldo Case Else Aumento = 0 End Select Range("C5") = Aumento End Sub
* 0.20 * 0.15 * 0.10 * 0.05
15. La Instrucción Do...Loop Repite un bloque de instrucciones cuando una condición es Verdadera o hasta que una condición se convierta en Falsa.
Sintaxis Do While | Until condición instrucciones Exit Do instrucciones Loop O bien, puede utilizar esta sintaxis: Do instrucciones Exit Do instrucciones Loop While | Until condición Donde: Elaborado por: Daniel Zegarra Zavaleta
Pág. 65
condición
Instrucciones
Opcional. Expresión numérica o expresión de cadena que es Verdadera o Falsa. Si la condición es Null, la condición se considera Falsa. Una o más instrucciones que se repiten mientras ( While) o hasta que (Until) la condición sea Verdadera.
Se puede utilizar cualquier número de instrucciones Exit Do ubicadas en cualquier lugar dentro de una estructura de control Do…Loop, para proporcionar una salida alternativa de un Do…Loop. La instrucción Exit Do se utiliza frecuentemente en la evaluación de alguna condición, por ejemplo, If…Then; en este caso, la instrucción Exit Do transfiere el control a la instrucción que sigue inmediatamente a la instrucción Loop. Cuando se utiliza con instrucciones anidadas Do…Loop, la instrucción Exit Do transfiere control al bucle que está anidado un nivel por encima del bucle donde ocurre. a. Como usar las instrucciones Do...Loop Se pueden usar instrucciones Do...Loop para ejecutar un bloque de instrucciones un número indefinido de veces. Las instrucciones se repiten mientras ( While) una condición sea Verdadera o hasta ( Until) que llegue a ser Verdadera. b. Repetir instrucciones mientras una condición es Verdadera Hay dos formas de utilizar la palabra clave While (Mientras) para comprobar el estado de una condición en una instrucción Do...Loop. Se puede comprobar la condición antes de entrar en el bucle, o después de que el bucle se haya ejecutado al menos una vez. En el siguiente procedimiento WhileInicial, la condición se comprueba antes de entrar en el bucle. Mientras la Nota es menor a que 10, aumentar la Nota en 1.Si Nota es mayor que 10, las instrucciones contenidas en el bucle no se ejecutarán nunca. En el procedimiento WhileFinal, las instrucciones contenidas en el bucle al menos se ejecutarán una vez y aumentarán la Nota en 1, antes de comprobarse que la condición es Falsa. Sub WhileInicial() Contador = 0 Nota = Range("D4") Do While Nota < 10 Nota = Nota + 1 Contador = contador + 1 Loop MsgBox "El bucle se ha repetido " & Contador & " veces." End Sub Sub WhileFinal() Contador = 0 Nota = Range("D4") Do Nota = Nota + 1 Contador = contador + 1 Loop While Nota < 10
Elaborado por: Daniel Zegarra Zavaleta
Pág. 66
MsgBox "El bucle se ha repetido " & Contador & " veces." End Sub
c. Para repetir instrucciones hasta que una condición llegue a ser Verdadera Hay dos formas de utilizar la palabra clave Until (Hasta que) para comprobar el estado de una condición en una instrucción Do...Loop. Se puede comprobar la condición antes de entrar en el bucle (como muestra el procedimiento UntilInicial) o se pueden comprobar después de que el bucle se haya ejecutado al menos una vez (como muestra el procedimiento UntilFinal). El bucle seguirá ejecutándose mientras la condición siga siendo Falsa. Sub UntilInicial() Contador = 0 Nota = Range("D4") Do Until Nota = 10 Nota = Nota + 1 Contador = Contador + 1 Loop MsgBox "El bucle se ha repetido " & Contador & " veces." End Sub Sub UntilFinal() Contador = 0 Nota = Range("D4") Do Nota = Nota + 1 Contador = Contador + 1 Loop Until Nota = 10 MsgBox "El bucle se ha repetido " & Contador & " veces." End Sub
d. Para salir de Do...Loop desde dentro del bucle Es posible salir de Do...Loop usando la instrucción Exit Do. Por ejemplo, para salir de un bucle sin fin, se puede usar la instrucción Exit Do en el bloque de instrucciones True de una instrucción If...Then...Else o Select Case. Si la condición es False, el bucle seguirá ejecutándose normalmente. En el siguiente ejemplo, si se asigna a Edad un valor que crea un bucle sin fin, por ejemplo si la Edad escrita en D4 es menor que 25. La instrucción If...Then...Else comprueba esa condición y ejecuta entonces la salida, evitando así el bucle sin fin. Sub EjemploSalida() Contador = 0 Edad = Range("E4") Do Until Edad = 25 Edad = Edad - 1 Contador = contador + 1 If Edad < 25 Then Exit Do Loop MsgBox "El bucle se ha repetido " & Contador & " veces." End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 67
Nota.-
Para detener manualmente la ejecución de un bucle sin fin que se repite sin control, presione la tecla Esc o la combinación de teclas Ctrl+Pausa.
16. La instrucción For Each...Next Repite un grupo de instrucciones para cada elemento de una matriz o colección.
Sintaxis For Each elemento In grupo instrucciones Exit For instrucciones Next elemento Donde: elemento
grupo instrucciones
Requerido. Variable que se utiliza para iterar por los elementos del conjunto o matriz. Para conjuntos, elemento solamente puede ser una variable del tipo Variant, una variable de objeto genérica o cualquier variable de objeto específica. Requerido. Nombre de un conjunto de objetos o de una matriz . Opcional. Una o más instrucciones que se ejecutan para cada elemento de un grupo.
La entrada al bloque For Each se produce si hay al menos un elemento en grupo. Una vez que se ha entrado en el bucle, todas las instrucciones en el bucle se ejecutan para el primer elemento en grupo. Después, mientras haya más elementos en grupo, las instrucciones en el bucle continúan ejecutándose para cada elemento. Cuando no hay más elementos en el grupo, se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next. Se pueden colocar en el bucle cualquier número de instrucciones Exit For. La instrucción Exit For se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then) y transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next. Puede anidar bucles For Each...Next, colocando un bucle For Each...Next dentro de otro. Sin embargo, cada elemento del bucle debe ser único. Nota.-
Si se omite el nombre del elemento en una instrucción Next, la ejecución continúa como si se hubiera incluido. En cambio si se encuentra una instrucción Next antes de su instrucción For correspondiente, se producirá un error.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 68
a. Como usar las instrucciones For Each...Next Las instrucciones For Each...Next repiten un bloque de instrucciones para cada uno de los objetos de una colección o para cada elemento de una matriz. Visual Basic asigna valor automáticamente a una variable cada vez que se ejecuta el bucle. b. Para recorrer un conjunto de elementos Se puede usar el bucle For Each...Next para recorrer las celdas pertenecientes a un rango determinado. El siguiente ejemplo borra todas las celdas cuyo valor es cero dentro del rango previamente seleccionado. (La palabra Celda es el nombre que representa a cada elemento del rango. Puede usarse cualquier otro nombre si se desea.) Sub BorraCeros() For Each Celda In Selection If Celda=0 Then Celda.ClearContents Next End Sub
El siguiente ejemplo vuelve negrita todas aquellas celdas dentro del rango C4:C20 que sean mayores que 10. Sub Negrita() For Each Casilla In Range("C4:C20") If Casilla > 10 Then Casilla.Font.Bold = True Next End Sub
El código siguiente recorre todas las celdas de un rango, asignado a la variable Cuadro con la instrucción Set, e introduce el valor de la variable P en aquellas celdas cuyos contenidos son menores o iguales a 10. Sub Escribe() P = Range("B1") Set Cuadro = Range("C4:C20") For Each Cel In Cuadro If Cel <= 10 Then Cel.Value = P Next End Sub
El siguiente ejemplo recorre las celdas del rango B3:B15 y convierte cualquier valor absoluto menor de 0.01 en 0 (cero). Sub ValeCero() Set Lecturas = Range("B3:B15") For Each Dato in Lecturas If Abs(Dato.Value) < 0.01 Then Dato.Value = 0 Next End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 69
El siguiente procedimiento cierra todos los formularios excepto el que contiene al procedimiento que se está ejecutando. Sub CierraFormularios() For Each Ficha In Application.Forms If Ficha.Caption <> Screen.ActiveForm.Caption Then Ficha.Close Next End Sub
Este otro ejemplo agrega tantas hojas nuevas al libro activo como textos hay en el rango B1:B5, y a continuación nombra a estas hojas con los textos que va encontrando. Sub CreaHojas() For Each Nombre In Range("B1:B5") If Nombre <> Empty Then Set NewSheet = Worksheets.Add NewSheet.Name = Nombre End If Next End Sub
Este último ejemplo muestra el nombre de cada una de las hojas de cálculo del libro activo. Sub VerHojas() For Each Hoja In Worksheets MsgBox Hoja.Name Next End Sub
c. Para salir de un bucle For Each...Next antes de que finalice Se puede salir de un bucle For Each...Next mediante la instrucción Exit For. El siguiente ejemplo detecta la primera celda del rango C3:C30 que no contiene un número. Si se encuentra una celda en esas condiciones, se selecciona dicha celda y se presenta un mensaje en pantalla, luego Exit For abandona el bucle.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 70
Sub EncuentraTexto() For Each Celda In Range("C3:C30") If Not IsNumeric(Celda) Then Celda.Select MsgBox "El objeto contiene un valor no numérico." Exit For End If Next End Sub
17. La instrucción With Ejecuta una serie de instrucciones sobre un único objeto.
Sintaxis With objeto instrucciones End With Donde: objeto Requerido. Nombre de un objeto. instrucciones Opcional. Una o más instrucciones que se van a ejecutar sobre el objeto. La instrucción With permite realizar una serie de instrucciones sobre un objeto especificado sin volver a calificar el nombre del objeto. Por ejemplo, para cambiar un número de propiedades diferentes en un único objeto, es más conveniente colocar las instrucciones de asignación de las propiedades en la estructura de control With, haciendo referencia al objeto una vez, en lugar de hacerlo con cada asignación de propiedad. a. Como usar las instrucciones With La instrucción With permite especificar una vez un objeto o tipo definido por el usuario en una serie entera de instrucciones. Las instrucciones With aceleran la ejecución de los procedimientos y ayudan a evitar el tener que escribir repetidas veces las mismas palabras. El siguiente ejemplo introduce en un rango de celdas el número 30, aplica a esas celdas un formato en negrita y hace que su color de fondo sea el amarillo. Si se deseara seleccionar la celda A1 de la Hoja2 y luego modificar en ella lo siguiente; Ancho de columna = 50 Altura de fila = 20 Letra negrita Tamaño de fuente 20 puntos Elaborado por: Daniel Zegarra Zavaleta
Pág. 71
Color de fuente Roja Centrado en la celda Podríamos escribir las siguientes instrucciones: Sub Titulo() Worksheets("Hoja2").Range("A1").Select Selection.ColumnWidth = 50 Selection.RowHeight = 20 Selection.Font.Bold = True Selection.Size = 20 Selection.Font.ColorIndex = 3 Selection.HorizontalAlignment = xlCenter End Sub
El siguiente ejemplo realiza lo mismo que el caso anterior e ilustra el uso de la instrucción With para asignar valores a varias propiedades del mismo objeto. Sub Titulo() Range("A1").Select With Selection .ColumnWidth = 50 .RowHeight = 20 .Font.Bold = True .Size = 20 .Font.ColorIndex = 3 .HorizontalAlignment = xlCenter End With End Sub Nota Una vez que se ha entrado en un bloque With no es posible cambiar el objeto. Por tanto, no puede utilizar una única instrucción With para varios objetos.
Nota En general, no es aconsejable que salte hacia dentro o hacia fuera de bloques With. Si se ejecutan instrucciones en bloques With, sin que se ejecuten las instrucciones With o End With conserva en memoria una variable temporal que contiene una referencia al objeto hasta que se salga del procedimiento.
Aquí otro ejemplo del uso de With: Sub RangoFormato() With Worksheets("Clientes").Range("A1:C10") .Value = 30 .Font.Bold = True .Interior.Color = RGB(255, 255, 0) End With End Sub
Las instrucciones With se pueden anidar para aumentar su eficiencia. El siguiente ejemplo inserta una formula en la celda C4 que obtiene la raíz cuadrada de 200 y selecciona a continuación el tipo de letra. Luego modifica el ancho de la columna. (Note que se especifica que C4 se encuentra dentro de la hoja Clientes del
Elaborado por: Daniel Zegarra Zavaleta
Pág. 72
archivo Pagos.xls. De no hacerse así la macro supondría que se trata de la celda C4 de la hoja y libro activos en ese instante.) Sub RaizCuadrada() With Workbooks("Pagos.xls").Worksheets("Clientes").Range("C4") .Formula = "=SQRT(200)" With .Font .Name = "Arial" .Bold = True .Size = 8 End With .ColumnWidth = 20 End With End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 73
18. Creación de formularios userforms a. Para crear un formulario Al igual como se inserta una hoja de módulo para escribir en ella las macros, tambien se puede insertar una hoja de formulario para disenar en ella las ventanas de formulario. Solo tiene que seguir las siguientes instruciones: 1. Ingresar al Editor de Visual Basic y elegir el menú Insertar/Userform. Se creará un formulario llamado UserForm1, tal como se muestra en la figura:
Escriba el Nombre del formulario Escriba el Título del formulario
2. En la ventana Propiedades, escribir en la propiedad (Name): Alumnos, y en la propiedad Caption escriba: Ficha del Alumno. b. Para diseñar un formulario Una vez creado el formulario lo siguiente es diseñar los elementos dentro del formulario. Para ello es necesario habilitar el cuadro de herramientas, para lo cual deberá hacer clic en el botón
Elaborado por: Daniel Zegarra Zavaleta
Pág. 74
El cuadro de herramientas contiene una serie de controles de, cada uno de los cuales cumplen una función especial una vez que se insertan dentro del formulario.
Controles para formularios del cuadro de herramientas:
Seleccionar objetos
Cuadro de texto Cuadro de lista
Etiqueta
Cuadro combinado
Cuadro de texto
Página múltiple
B.de opción B.de alternar Marco
Barra de tabulaciones
B.de comando
Imagen Botón de número Barra de desplazamiento
Como agregar un control al formulario Utilice cualquiera de los siguientes métodos para agregar un control del Cuadro de herramientas al formulario. •
•
•
Haga clic en un control en el Cuadro de herramientas y después haga clic en el formulario. El control aparecerá en su tamaño predeterminado. Luego puede arrastrar el control para cambiar su tamaño. Arrastre un control del Cuadro de herramientas al formulario. El control aparecerá en su tamaño predeterminado. Haga doble clic en el control del Cuadro de herramientas y después haga clic en el formulario una vez por cada control que desee crear. Por ejemplo, para crear cuatro botones de comando, haga doble clic en el control CommandButton del Cuadro de herramientas y después haga clic cuatro veces en el formulario.
Ejercicio Nº 8 - Llenar un Registro de alumnos En este ejemplo se usará un formulario para ingresar datos de varios alumnos en una lista de Excel. Elaborado por: Daniel Zegarra Zavaleta
Pág. 75
1. En una hoja de Excel escriba el siguiente Registro de alumnos:
2. Seleccionar el rango A3:F6 y presionar Ctrl+Q para convertir el rango en tabla. 3. Seleccionar el rango A3:F6 y elegir la Ficha Fórmulas/Crear desde la selección, marque solo la casilla Fila superior, y Aceptar. 4. Con la Ficha Insertar/Formas/Rectángulo, dibuje el botón “Abrir Ficha”. 5. Al rango A3:F6 dele el nombre LISTA. 6. Ingrese al Editor de Visual Basic, e inserte una hoja de Módulo (menú Insertar/Módulo), y un Formulario (menú Insertar/UserForm). 7. En la hoja de Módulo escriba la siguiente subrutina: Sub FichaAlumno() Alumnos.Show End Sub
8. En la ventana de formulario diseñe el siguiente formulario:
9. Seleccione el formulario y dele las siguientes propiedades: •
(Name)
: Alumnos
Caption : Ficha del Alumno 10. Luego defina las siguientes propiedades de los controles en el formulario: •
Elaborado por: Daniel Zegarra Zavaleta
Pág. 76
Cuadro combinado: •
(Name)
: Codigo
•
RowSource
: Codigo
•
Tab index
:1
Cuadro de texto1: •
(Name)
: Nombre
•
Tab index
:2
Cuadro de texto2: •
(Name)
Tab index Cuadro de texto3: •
•
(Name)
Tab index Cuadro de texto4: •
•
(Name)
Tab index Botón de opción1: •
•
(Name)
: Apellidos :3 : Edad :4 : Telefono :5 : Masculino
Botón de opción2: (Name) Image1: •
: Femenino
•
(Name)
: Foto
•
PictureSizeMode
: 1 - fmPictureSizeModeStretch
CommandButton1: (Name) CommandButton2:
: Registrar
(Name) CommandButton3:
: Cerrar
•
•
•
(Name)
: Nuevo
Luego, haciendo doble clic sobre los siguientes controles escriba para ellos el siguiente código:
Para el botón Cerrar: Private Sub Cerrar_Click() Unload Me End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 77
Para el cuadro combinado Codigo: Private Sub Codigo_Change() Ruta = ActiveWorkbook.Path Codigo = UCase(Codigo) Nombre = "" Apellido = "" Edad = "" Telefono = "" Masculino = False Femenino = False If Len(Codigo) = 4 Then On Error GoTo SinFoto Nombre = Application.WorksheetFunction.VLookup(Codigo, _ Range("Lista"), 2, 0) Apellido = Application.WorksheetFunction.VLookup(Codigo, _ Range("Lista"), 3, 0) Edad = Application.WorksheetFunction.VLookup(Codigo, _ Range("Lista"), 4, 0) Sexo = Application.WorksheetFunction.VLookup(Codigo, _ Range("Lista"), 5, 0) If Sexo = "M" Then Masculino = True If Sexo = "F" Then Femenino = True Telefono = Application.WorksheetFunction.VLookup(Codigo, _ Range("Lista"), 6, 0) Foto.Visible = True Foto.Picture = LoadPicture(Ruta & "\" & Codigo & ".jpg") Else Foto.Visible = False End If Exit Sub SinFoto: Foto.Visible = False End Sub
Para el botón Nuevo (New): Private Sub Nuevo_Click() Range("Codigo").Select While ActiveCell <> Empty ActiveCell.Offset(1, 0).Select Wend ActiveCell.Offset(-1, 0).Select Codigo = "A" & Right("00" & Val(Right(ActiveCell, 3)) + 1, 3) Nombre.SetFocus End Sub
Para el botón Registrar: Private Sub Registrar_Click() If Codigo = "" Then Codigo.SetFocus: Exit Sub If Nombre = "" Then Nombre.SetFocus: Exit Sub Range("Codigo").Select ActiveCell.Select While ActiveCell <> Empty
Elaborado por: Daniel Zegarra Zavaleta
Pág. 78
If ActiveCell = Codigo Then Rpta = MsgBox("Alumno ya existe desea reemplazarlo?", _ vbYesNo) If Rpta = vbYes Then GoTo Sigue Exit Sub End If ActiveCell.Offset(1, 0).Select Wend Sigue: If Masculino Then Sexo = "M" If Femenino Then Sexo = "F" ActiveCell = Codigo ActiveCell.Offset(0, 1) = Nombre ActiveCell.Offset(0, 2) = Apellido ActiveCell.Offset(0, 3) = Val(Edad) ActiveCell.Offset(0, 4) = Sexo ActiveCell.Offset(0, 5) = Telefono MsgBox ("Alumno registrado con exito") Range("Codigo").Select While ActiveCell <> Empty ActiveCell.Offset(1, 0).Select Wend ActiveCell.Offset(-1, 0).Select Codigo = "A" & Right("00" & Val(Right(ActiveCell, 3)) + 1, 3) Nombre = "" Apellido = "" Edad = "" Telefono = "" Masculino = False Femenino = False Nombre.SetFocus End Sub
Para el Formulario: Private Sub UserForm_Initialize() Range("Codigo").Select While ActiveCell <> Empty ActiveCell.Offset(1, 0).Select Wend ActiveCell.Offset(-1, 0).Select Codigo = "A" & Right("00" & Val(Right(ActiveCell, 3)) + 1, 3) Nombre.SetFocus Foto.Visible = False End Sub
11. Luego regrese a la hoja de Excel y asigne la macro FichaAlumno al botón “Abrir Ficha”. 12. Finalmente guarde el archivo como un libro habilitado para macros y póngale el nombre Registro de alumnos . 13. En la misma carpeta donde guarde el anterior archivo de Excel, deberá guardar también los archivos con formato jpg que contengan las fotos de los alumnos, los cuales deberán tener nombres como: A001.jpg, A002.jpg, … etc. Elaborado por: Daniel Zegarra Zavaleta
Pág. 79
Práctica De Laboratorio Nº1
Objetivos: Entender la diferencia al grabar macros con referencias absolutas y macros con referencias relativas. •
Uso de la grabadora de macros utilizando referencias absolutas y relativas.
•
Asignación de macros a botones
Un Empresa de taxis se comunica por radio con sus unidades a fin de establecer la tarifa que deben cobrar los choferes a sus clientes, teniendo como datos los lugares de origen y destino de cada carrera.
Para lograr esto, en la central de taxis se cuenta con una hoja de cálculo en Excel que contiene las tarifas a cobrar entre cada punto origen y destino de los distritos de Lima: •
•
El chofer llama a la central informando los sitios origen y destino de la carrera La central de taxis calcula el monto a cobrar en la carrera y si el cliente la acepta la central registrará la carrera en el cuadro de viajes
Elaborado por: Daniel Zegarra Zavaleta
Pág. 80
1ra Parte:
Creación el Cuadro de Viajes y la Tabla de Tarifas
1. En la Hoja1 crear el Cuadro de Viajes, tal y como se muestra a continuación en la figura.
2. En la Hoja2 crear la siguiente Tabla de Tarifas: Dar nombre a los siguientes rangos: A6:A16 ORIGEN B5:L5 DESTINO Luego dar nombre de rango a cada fila y columna de la tabla, para lo cual haga lo siguiente: •
Seleccionar el rango A5:L16
Elegir la Ficha Formulas/Crear desde la selección , y luego Aceptar 3. En la Hoja1 hacer lo siguiente: •
•
Dar nombre al rango G5:G9
CHOFERES
•
Validar la Celda B5:
Permitir: Lista, Origen: =CHOFERES
•
Validar la Celda C5:
Permitir: Lista, Origen: =ORIGEN
•
Validar la Celda D5:
Permitir: Lista, Origen: =DESTINO
4. Dar nombre de rango a cada columna del cuadro de viajes: •
Seleccionar el rango A4:E5
Elaborado por: Daniel Zegarra Zavaleta
Pág. 81
•
Elegir la Ficha Formulas/Crear desde la selección , verificar que solo esté marcada la casilla Fila superior , y luego Aceptar
5. En la celda H5 escribir la siguiente fórmula matricial: {=SUMA(SI((Chofer=G5)*(Dia>=H$2)*(Dia
Grabar la macro que registre las carreras en el Cuadro de Viajes
6. En la Hoja1 ingresar los siguientes datos en el Cuadro de Viajes:
Para Grabar la macro Registrar: 7. En la ficha Programador verificar que esté habilitado el comando Usar referencias relativas 8. Estando el puntero en la celda D5, en la Ficha Programador elegir el comando Grabar macro, escribir como nombre de la macro: Registrar, y luego Aceptar. 9. Estando encendida la grabadora de macros realice las siguientes acciones: •
Seleccionar la celda E5
•
Escribir la fórmula: =INDIRECTO(B5) INDIRECTO(C5) y presionar Enter.
•
•
•
Seleccionar la celda E5 y presionar Ctrl+C, luego clic derecho Pegado especial , marcar Valores y Aceptar. Luego presionar Esc. Seleccionar la celda A5 y escribir la formula =AHORA() y presionar Enter Seleccionar la celda A5 y presionar Ctrl+C, luego clic derecho Pegado especial , marcar Valores y Aceptar. Luego presionar Esc.
•
Seleccionar B5:D5 y con el cuadro de relleno copiar estas 3 celdas en la fila 6.
•
Seleccionar el rango B6:D6 y presionar al tecla Suprimir.
•
Seleccionar la celda B6
Elaborado por: Daniel Zegarra Zavaleta
Pág. 82
•
Presionar Ctrl+*
•
Ficha Formulas/Crear desde la selección , marcar solo Fila superior , y Aceptar
•
Seleccionar la celda B6, y luego presionar Ctrl+↓
•
Finalmente presionar la tecla ↓ una vez
10. Finalizar la grabación de la macro con un clic en el boton 11. La Hoja1 se verá entonces así:
Detener grabación.
Para Ver y Modificar la macro Registrar en la ventana del Editor de Visual Basic: 12. En la Ficha Programador/Macros, seleccionar la macro Registrar y luego clic en el boton Modificar. Se abrirá la ventana del Editor de Visual Basic y se verá en ella el código de la siguiente subrutina: Sub Registrar() ActiveCell.Offset(0, 1). Range("A1"). Select ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-2]) INDIRECT(RC[-1])"
ActiveCell.Select Selection.Style = "Currency" Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues , Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False ActiveCell.Offset(0, -4). Range("A1"). Select ActiveCell .FormulaR1C1 = "=NOW()" Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues , Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False ActiveCell.Offset(0, 1).Range("A1:C1").Select Selection.AutoFill Destination:=ActiveCell.Range("A1:C2"), Type:= _ xlFillDefault
ActiveCell.Range("A1:C2").Select ActiveCell.Offset(1, 0).Range("A1:C1"). Select Selection. ClearContents
ActiveCell.Select Application.CutCopyMode = False Selection.CurrentRegion.Select Selection.CreateNames Top:=True, Left:=False , Bottom:=False, Right:= _
False
Elaborado por: Daniel Zegarra Zavaleta
Pág. 83
Range("B4").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0). Range("A1"). Select End Sub
13. El usar la grabadora de macros crea en ocasiones algunas lineas de codigo innecesarias. Lineas que aparecen en negrita en la subrutina anterior. Si se desea estas lineas se pueden borrar o modificar para hacer mas eficiente la ejecucion de la macro, además agregar la sentencia Application.DisplayAlerts=False, luego de lo cual la subrutina quedaría como se muestra a continuación: Sub Registrar() ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-2]) INDIRECT(RC[-1])" Selection.Style = "Currency" Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveCell.Offset(0, -4).Select ActiveCell = "=NOW()" Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveCell.Offset(0, 1).Range("A1:C1").Select Selection.AutoFill Destination:=ActiveCell.Range("A1:C2"), Type:= _ xlFillDefault
ActiveCell.Offset(1, 0).Range("A1:C1").ClearContents
Application.CutCopyMode = False Selection.CurrentRegion.Select
Application.DisplayAlerts = False Selection.CreateNames Top:=True, Left:=False
Range("B4").Select Selection.End(xlDown).Offset(1, 0).Select End Sub
Nota: La sentencia Application.DisplayAlerts=False evitará que aparezca la ventana de dialogo advirtiendo que se van a modificar los tamaños de los nombres de rango del cuadro de viajes.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 84
Para Escribir la macro Nuevo: 14. Debajo de la sentencia End Sub escriba la siguiente subrutina: Sub Nuevo() Range("B4").Select While ActiveCell <> Empty ActiveCell.Offset(1, 0).Select Wend End Sub
15. Finalmente dibuje los botones “Nuevo” y “Registrar”, y asigneles a cada uno las macros correspondientes. 16. Si en la celda H2 se escribe la fecha, entonces la Hoja1 se deberá ver asi:
17. Para ingresar una nueva carrera de taxi, solo habrá que elegir en la celda B6 el nombre del chofer, en C6 el lugar origen, en D6 el lugar destino, y luego bastará con hacer clic en el boton “Registrar” para que se complete el registro de un nuevo viaje. 18. Automáticamente en la columna H se iran calculando los montos acumulados de los diferentes choferes en la fecha escrita en la celda H2. 19. Finalmente guarde este archivo como un Libro habilitado para macros y póngale el nombre Taxi. El archivo se gaurdará con el nombre Taxi.xlsm
Elaborado por: Daniel Zegarra Zavaleta
Pág. 85
Práctica De Laboratorio Nº2
Objetivos: Se desea ingresar datos en tres diferentes listas ubicadas en hojas distintas de un libro, a partir de datos escritos en la primera hoja de cálculo. Para los cual se van a crear dos macros: •
Una macro que crea códigos correlativos para cada una de las listas.
•
Una segunda macro que registra los datos en la lista respectiva.
1. En la hoja Datos escribir lo siguiente:
2. Seleccionar la celda B3 y en la ficha Datos elegir el comando Validación de datos: En el casillero Permitir, elegir la opción Lista. En el casillero Origen, escribir Personal,Equipo,Materiales Luego Aceptar. 3. Dibujar también los botones rectangulares para las macros Crea Código y Registrar, tal como se muestra en la figura. 4. En la hoja Personal ingrese lo siguiente:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 86
5. En la hoja Equipo ingrese lo siguiente:
6. En la hoja Materiales ingrese lo siguiente:
7. Ingresar a Visual Basic y en una hoja de módulo escriba el siguiente código para las macros: Sub CreaCodigo() If Range("B3") = "" Then Exit Sub Cuadro = Range("B3") Sheets(Cuadro).Select Range("A3").Select Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption1:=xlSortNormal Selection.End(xlDown).Select Cod = Left(ActiveCell, 1) & Right("000" & _ Val(Right(ActiveCell, 4)) + 1, 4) Sheets("Datos").Select Range("B4") = Cod End Sub
Sub Registrar() Cuadro = Range("B3") Codigo = Range("B4") Descripcion = Range("B5") Unidad = Range("B6") Costo = Range("B7") Sheets(Cuadro).Select Range("A3").Select While ActiveCell <> Empty
Elaborado por: Daniel Zegarra Zavaleta
Pág. 87
ActiveCell.Offset(1, 0).Select Wend ActiveCell = Codigo ActiveCell.Offset(0, 1) = Descripcion ActiveCell.Offset(0, 2) = Unidad ActiveCell.Offset(0, 3) = Costo Sheets("Datos").Select MsgBox ("Los datos han sido registrados exitosamente") Range("B3:B7").ClearContents End Sub
8. Regrese a Excel y asigne las macros “CreaCodigo” y “Registrar” a los botones correspondientes. 9. Finalmente guarde el libro con el nombre “Registrar Datos en Listas” en un archivo habilitado para macros.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 88
Práctica De Laboratorio Nº3
Objetivos: Utilizar las distintas sentencias de control para la solución de múltiples tareas en el manejo de datos. Las sentencias de control a utilizarse son las siguientes: •
If..then..else,
•
Select Case
•
While…wend,
•
For…next,
•
For each…next.
1. En la hoja de cálculo escribir los siguientes datos:
2. En Visual Basic insertar una hoja de módulo y escribir las siguientes subrutinas: 'POSICIONA EL PUNTERO DEBAJO DEL TITULO EDAD Sub PrimeraEdad1() Range("A3").Select ActiveCell.CurrentRegion.Columns(4).Select ActiveCell.Offset(1, 0).Select End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 89
Sub PrimeraEdad2() Range("A3").Select ActiveCell.CurrentRegion.Select ActiveCell.Select While ActiveCell <> "Edad" ActiveCell.Offset(0, 1).Select Wend ActiveCell.Offset(1, 0).Select End Sub 'POSICIONA EL PUNTERO EN LA PRIMERA COLUMNA AL FINAL DE LA LISTA Sub Nuevo() Range("A3").End(xlDown).Offset(1, 0).Select End Sub Sub Nuevo2() Range("A3").Select ActiveCell.CurrentRegion.Select ActiveCell.Offset(Selection.Rows.Count,0).Select End Sub Sub Nuevo3() Range("A3").Select While ActiveCell <> Empty ActiveCell.Offset(1, 0).Select Wend End Sub
'CUENTA LA CANTIDAD DE ALUMNOS INSCRITOS Sub ContarInscritos() Range("A4").Select N = 0 While ActiveCell <> Empty N = N + 1 ActiveCell.Offset(1, 0).Select Wend MsgBox ("Hay " & N & " alumnos inscritos") End Sub 'CUENTA LA CANTIDAD DE MUJERES Y HOMBRES INSCRITOS Sub ContarPorSexo1() Range("A4").Select H = 0 M = 0 While ActiveCell <> Empty If ActiveCell.Offset(0, 2) = "M" Then H = H + 1 If ActiveCell.Offset(0, 2) = "F" Then M = M + 1 ActiveCell.Offset(1, 0).Select Wend MsgBox ("Hay " & M & " Mujeres y " & H & " Hombres inscritos") End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 90
Sub ContarPorSexo2() Range("A3").Select ActiveCell.CurrentRegion.Columns(3).Select H = Application.WorksheetFunction.CountIf(Selection, "M") M = Application.WorksheetFunction.CountIf(Selection, "F") Range("A3").Select MsgBox ("Hay " & M & " Mujeres y " & H & " Hombres inscritos") End Sub 'INDICA EL TIPO DE PERSONA SEGUN SU EDAD Sub TipoPersona() Edad = Val(InputBox("Ingrese su edad")) If Edad = Empty Then Exit Sub If Edad < 18 Then MsgBox ("Ud. es menor de Edad") If Edad >= 18 Then MsgBox ("Ud. es mayor de edad") End Sub
'INSCRIBE A UNA PERSONA AL FINAL DE LA LISTA Sub Inscripcion() Nombre = InputBox("Ingrese el Nombre de la persona:") Range("A3").End(xlDown).Offset(1, 0).Select ActiveCell = Nombre End Sub 'REGISTRA LA ENTREGA DE CARNET A LOS ALUMNOS Sub Entrega1() Range("A3").Select Nombre = InputBox("Ingrese el Nombre de la persona:") If Nombre = Empty Then Exit Sub While ActiveCell <> Empty ActiveCell.Offset(1, 0).Select If UCase(ActiveCell) = UCase(Nombre) Then If ActiveCell.Offset(0, 1) = "Entregado" Then MsgBox ("A " & Nombre & " ya se le ha entregado su Carnet") Exit Sub End If ActiveCell.Offset(0, 1) = "Entregado" Exit Sub End If Wend MsgBox (Nombre & " no existe en esta lista") End Sub Sub Entrega2() Range("A3").Select Nombre = InputBox("Ingrese el Nombre de la persona:") If Nombre = "" Then Exit Sub While ActiveCell <> Nombre ActiveCell.Offset(1, 0).Select If ActiveCell = Empty Then
Elaborado por: Daniel Zegarra Zavaleta
Pág. 91
MsgBox (Nombre & " no existe en esta lista") Exit Sub End If Wend ActiveCell.Offset(0, 1) = "Entregado" End Sub 'IDENTIFICA EL TIPO DE PERSONA PARA CADA ALUMNO Sub Persona() Range("A4").Select While ActiveCell <> Empty Edad = ActiveCell.Offset(0, 3) Select Case Edad Case Is >= 18 ActiveCell.Offset(0, 4) = "Adulto" Case 13 To 17 ActiveCell.Offset(0, 4) = "Adolescente" Case 1 To 13 If ActiveCell.Offset(0, 2) = "M" Then ActiveCell.Offset(0, 4) = "Niño" Else ActiveCell.Offset(0, 4) = "Niña" End If End Select ActiveCell.Offset(1, 0).Select Wend End Sub 'CALCULA LA DEUDA DE CADA ALUMNO Sub CalculaDeuda() Range("A3").CurrentRegion.Select Alumnos = Selection.Rows.Count - 1 Range("G4").Select For N = 1 To Alumnos ActiveCell = 200 - ActiveCell.Offset(0, -1) ActiveCell.Offset(1, 0).Select Next End Sub 'CUENTA LA CANTIDAD DE MUJERES Y HOMBRES INSCRITOS Sub ContarPorSexo3() Range("A3").CurrentRegion.Select Alumnos = Selection.Rows.Count - 1 Range("C4").Select H = 0 M = 0 For N = 1 To Alumnos If ActiveCell = "M" Then H = H + 1 If ActiveCell = "F" Then M = M + 1 ActiveCell.Offset(1, 0).Select Next
Elaborado por: Daniel Zegarra Zavaleta
Pág. 92
MsgBox ("Hay " & M & " Mujeres y " & H & " Hombres inscritos") End Sub Sub ContarPorSexo4() Range("A3").CurrentRegion.Columns("C").Select H = 0 M = 0 For Each Celda In Selection If Celda = "M" Then H = H + 1 If Celda = "F" Then M = M + 1 Next MsgBox ("Hay " & M & " Mujeres y " & H & " Hombres inscritos") End Sub 'BORRA LOS PAGOS QUE SON CERO Sub BorraCeros() Range("A3").CurrentRegion.Columns("F:G").Select N = 0 For Each Celda In Selection If Celda = 0 Then Celda.ClearContents: N = N + 1 Next MsgBox "habian " & N & " ceros" End Sub 'OCULTA TODAS LAS HOJAS MENOS LA ACTIVA Sub OcultarHojas() N = 1 For Each H In Worksheets If ActiveSheet.Name <> H.Name Then H.Visible = False N = N + 1 Next End Sub 'MUESTRA TODAS LAS HOJAS Sub MostrarHojas() N = 1 For Each H In Worksheets If ActiveSheet.Name <> H.Name Then H.Visible = True N = N + 1 Next End Sub 'CREA 2 HOJAS MUJERES Y HOMBRES Y COPIA A LOS ALUMNOS EN ELLAS Sub SeparaAlumnos() Application.DisplayAlerts = False For Each H In Worksheets If H.Name = "Hombres" Then Sheets("Hombres").Delete Next For Each H In Worksheets If H.Name = "Mujeres" Then Sheets("Mujeres").Delete
Elaborado por: Daniel Zegarra Zavaleta
Pág. 93
Next Range("A3").Select Selection.AutoFilter Field:=3, Criteria1:="M" Selection.CurrentRegion.Select Selection.Copy Sheets.Add ActiveSheet.Name = "Hombres" Range("A3").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveCell.Select Sheets("Hoja1").Select Range("A3").Select Selection.AutoFilter Field:=3, Criteria1:="F" Selection.CurrentRegion.Select Selection.Copy Sheets.Add ActiveSheet.Name = "Mujeres" Range("A3").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveCell.Select Sheets("Hoja1").Select Range("A3").Select Selection.AutoFilter End Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 94
Práctica De Laboratorio Nº4
Objetivos: Se desea ingresar datos de diferentes clientes en una lista, utilizando tres métodos diferentes:. •
Copiando datos del cliente desde un rango de celdas.
•
Ingresar datos del cliente utilizando ventanas de Inputbox.
•
Ingresar datos del cliente a través de formularios
3. En la hoja de cálculo escribir los siguientes datos:
4. Luego dibuje tres botones rectangulares tal como se aprecia en la figura. 5. A continuación ingrese a Visual Basic, inserte una hoja de módulo y en ella escriba las siguientes subrutinas: Sub IngresoDatos1() Rpta = MsgBox("¿Seguro desea registrar estos datos?", vbYesNo) If Rpta = vbNo Then Exit Sub
Elaborado por: Daniel Zegarra Zavaleta
Pág. 95
DNI = Range("B6") Cliente = Range("B7") Telefono = Range("B8") Range("A11").Select While ActiveCell <> Empty If ActiveCell = DNI Then Rpta = MsgBox("Cliente ya existe, desea reemplazarlo?", vbYesNo) If Rpta = vbYes Then GoTo Sigue Exit Sub End If ActiveCell.Offset(1, 0).Select Wend Sigue: ActiveCell = DNI ActiveCell.NumberFormat = "00000000" ActiveCell.Offset(0, 1) = Cliente ActiveCell.Offset(0, 2) = Telefono ActiveCell.Offset(0, 2).NumberFormat = "#-####" Range("B6:B8").ClearContents Range("B6").Select End Sub
Sub IngresoDatos2() DNI = Val(InputBox("Ingrese DNI")) Cliente = InputBox("Ingrese nombre del cliente") Telefono = Val(InputBox("Ingrese numero de telefono")) Range("A11").Select While ActiveCell <> Empty If ActiveCell = DNI Then Rpta = MsgBox("Cliente ya existe, desea reemplazarlo?", vbYesNo) If Rpta = vbYes Then GoTo Sigue Exit Sub End If ActiveCell.Offset(1, 0).Select Wend Sigue: ActiveCell = DNI ActiveCell.NumberFormat = "00000000" ActiveCell.Offset(0, 1) = Cliente ActiveCell.Offset(0, 2) = Telefono ActiveCell.Offset(0, 2).NumberFormat = "#-####" End Sub
Sub IngresoDatos3() Ficha1.Show End Sub
6. Luego inserte una hoja de formulario (menú Insertar/Userform) y diseñe en ella el formulario tal como se muestra a continuación:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 96
7. Seleccione el fondo del formulario, y en la ventana Propiedades póngale en la propiedad (Name) el nombre Ficha1 8. También póngale nombre a cada cuadro de texto: DNI, Cliente y Telefono, respectivamente . 9. Igualmente con la propiedad (Name), póngale nombres a los botones de comando: Registrar, y Cancelar, respectivamente. 10. Luego haga doble clic en el botón Registrar, y escriba el siguiente código: Private Sub Registrar_Click() Range("A11").Select While ActiveCell <> Empty If ActiveCell = Val(DNI) Then Rpta = MsgBox("Cliente ya existe, desea reemplazarlo?", vbYesNo)
Elaborado por: Daniel Zegarra Zavaleta
Pág. 97
If Rpta = vbYes Then GoTo Sigue Exit Sub End If ActiveCell.Offset(1, 0).Select Wend Sigue: ActiveCell = Val(DNI) ActiveCell.NumberFormat = "00000000" ActiveCell.Offset(0, 1) = Cliente ActiveCell.Offset(0, 2) = Val(Telefono) ActiveCell.Offset(0, 2).NumberFormat = "#-####" DNI = "" Cliente = "" Telefono = "" DNI.SetFocus End Sub
11. Seguidamente regrese al formulario y haga doble clic en el botón de comando Cancelar, y allí escriba el siguiente código: Private Sub Cancelar_Click() Unload Me End Sub
12. Regrese a la ventana de Excel, y asigne a cada uno de los botones las macros: “IngresoDatos1”,”IngresoDatos2”, e “IngresoDatos3” respectivamente. 13. Finalmente guarde el libro con el nombre “Ingreso de Clientes” en un archivo habilitado para macros.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 98
Práctica De Laboratorio Nº5
Objetivos: Se van a confeccionar un cuadro que permita controlar las horas de ingreso y salida del personal de vigilancia de la empresa, para luego al final de la semana calcular el monto del pago por este servicio. •
Uso de elementos de formulario.
•
Manejo de Fechas y Horas y sus respectivos formatos
•
Empleo de las funciones Now y CountA en Visual Basic
•
Protección de la hoja de calculo con contraseñas
•
Como crear macros que asignan otras macros.
Un Empresa contrata los servicios de un vigilante particular el cual debe cumplir con un horario normal de 8:00 de mañana hasta las 4:00 de la tarde, y por lo cual se le pagará un jornal diario de 90 soles. Adicionalmente se han acordado estas otras condiciones que deberán cumplirse por ambas partes: •
Si trabaja 5 días a la semana sin faltar, hay una bonificación de 1 jornal adicional.
•
Por cada minuto de tardanza habrá un descuento de 1 sol.
•
Por tiempo extra de trabajo previamente autorizado, se pagará el doble que las horas normales.
1ra Parte:
Creación del Cuadro de Pago por Vigilancia
20. En una hoja de cálculo de Excel, a la cual se le pondrá el nombre Vigilancia, escriba el siguiente Cuadro de Pagos por Servicio de Vigilancia, tal y como se muestra a continuación en la figura. 21. Combinar y centrar los siguientes rangos de celdas: D2:C2 Tamaño de letra 12 puntos E2:G2, E3:F3, E10:H10, E12:F12 y G12:H12 22. Dar los siguientes colores de relleno a las celdas: B2:C2 Negro E2:H2 Negro B3:D3 Azul oscuro E3:F3 Rojo G3:H3 Oro F4:F8 Rojo H4:H8 Oro E10:H10 Azul oscuro D12 Rojo E12:F12 Oro G12H12 Turquesa claro 23. Seleccionar el rango C3:D8 y llamando al menú Formato/Celdas elegir la ficha Numero , categoría Personalizada y elegir el tipo de formato: hh:mm AM/PM, luego en la celda C3 escribir 8:00, y en D3 escribir 16:00.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 99
24. En los rangos E4:E9 y F4:F9 darle el formato personalizado: hh:mm
25. A la Hoja1 del libro darle el nombre Semana haciendo doble clic en etiqueta de hoja, y a la Hoja2 darle el nombre Horas. 26. En la hoja Horas escribir en A1 el título THORAS y en las celdas A3 y A4 las horas 7:30 y 7:31, luego darle a ambas el formato personalizado hh:mm AM/PM. 27. Seleccionar las celdas A3:A4 y arrastrar el cuadro de relleno hacia abajo hasta llegar a la celda A873 en la cual deberá aparecer las 10:00 pm. 28. Seleccionar el rango A3:A873 y darle el nombre de rango THORAS. 29. En las celdas C3 y C4 de la hoja Horas escribir las fechas 15/1/04 y 12/1/04 que corresponden a los dos primeros dias Lunes del año 2004. Luego seleccionando ambas celdas, arrastrar el cuadro de relleno hacia abajo hasta la celda C158 que correspondería al 25/12/06. 30. Seleccionar el rango C3:C158 y darle el nombre de rango SEMANAS. 31. En las celdas E3:F14 escribir los números y nombres de los doce meses del año como se muestra en la figura, y luego seleccionando el rango E3:F14 darle el nombre de rango MESES.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 100
32. Regrese a la Hoja Semana y seleccionando el rango B4:C8 llamar al menú Datos/Validación, en la casilla “ Permitir ” elegir Lista y en “ Origen” escribir =THORAS, luego en la Ficha “ Mensaje de error ” desactivar la casilla “ Mostrar mensaje de error si se introducen datos no validos ”, finalmente haga clic en Aceptar. 33. Usando la lista desplegable de validación ingrese en el rango C4:D8 los siguientes datos que se muestran en el cuadro: 34. En la hoja Semana definir los siguientes nombres de rango: F4:F8 ChDctos C4:D8 Horas
H4:H8 ChExtras C4:C8 Ingreso
D4:D8 Salida 35. También escriba las siguientes formulas: En la celda E2: ="del "&DIA(BUSCARV(HOY(),Semanas,1))&" al " &DIA(BUSCARV(HOY(),Semanas,1)+4)&" de " &BUSCARV(MES(BUSCARV(HOY(),Semanas,1)),Meses,2,0 ) En la celda B10:
=SI(C12=5,B12,0)
Elaborado por: Daniel Zegarra Zavaleta
Pág. 101
C12:
=CONTAR(C4:C8)
D12:
=E9*24*60
E12: F12:
=G9*24*B12/4 =B10+B12*C12-D12+E12
E4: =SI(ESTEXTO(C4),"",SI(Y(C4>C$3,C4<>""),C4-C$3,"")) Copie luego la anterior formula con el cuadro de relleno de E4 hasta E8. G4:
=SI(ESTEXTO(D4),"",SI(D4>D$3,D4-D$3,""))
Copie igualmente la anterior formula de G4 hasta G8. En la celda E9: =SUMAR.SI(F4:F8,VERDADERO,E4:E8) G9: =SUMAR.SI(H4:H8,VERDADERO,G4:G8) 36. Abra las herramientas de formulario con el menú Ver/Barra de herramientas/ Formularios, y con el botón “ Casilla de verificación ” dibuje una casilla y borre totalmente el texto que lo acompaña.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 102
37. En la casilla que acaba de crear haga un clic derecho y elija la opción Formato de control, luego en la casilla Vincular con la celda escriba F4, marque la casilla Sombreado 3D, y luego Aceptar. 38. Luego copie esta casilla 4 veces más otras celdas de la columna F y con la opción Formato de control cambie las celdas de vinculación para que sean F5, F6, F7 y F8 respectivamente. Luego repita el mismo procedimiento para las celdas G4:G8. 39. Cierre el grupo de herramientas de Formulario y luego marque con un check las casillas de verificación de las celdas F4, F5, F6, F7, F8, G7 y G8. tal y como se muestra en la figura más adelante. A continuación vamos a dar formato condicional a las celdas que tienen las horas para que cambien de color automáticamente de la siguiente forma: •
•
•
las horas de llegada si son más de las 8:00 am deberán cambiar a color rojo el fondo y letras blancas. Si hay descuentos, siempre y cuando este marcado un check en la columna G, entonces la celda también se pintará de fondo rojo y letras blancas. Las horas extras previamente autorizadas con un check en la columna H se pintarán de fondo color Oro.
40. Seleccionar el rango C4:C8 y llamando al menú Formato/Formato condicional elija lo siguiente: En el botón de Formato elija.- Fuente: Color Blanco y en Negrita; Bordes: Contorno; Tramas: Color Rojo.
41. Seleccionar el rango D4:D8 y dele el siguiente formato condicional: En el botón de Formato elija.- Fuente: Negrita; Bordes: Contorno; Tramas: Color Oro.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 103
42. Seleccionar ahora el rango F4:F8 y dele este otro formato condicional: En el botón de Formato elija.- Fuente: Color Blanco y en Negrita; Bordes: Contorno; Tramas: Color Rojo.
43. Seleccionar el rango D4:D8 y dele el siguiente formato condicional: En el botón de Formato elija.- Fuente: Negrita; Bordes: Contorno; Tramas: Color Oro.
44. A continuación guarde el archivo con el nombre Vigilancia. 45. El cuadro de vigilancia deberá verse entonces como se muestra a continuación:
Elaborado por: Daniel Zegarra Zavaleta
Pág. 104
2da Parte:
Creación de macros para automatizar el Cuadro
46. Con el botón que se encuentra en las herramientas de Formulario, dibujar los siguientes botones: Ingreso, Falta, Salida y Borrar Todo , como los que se muestran a continuación:
47. Además hacia el dalo superior derecho del cuadro dibujar con Autoformas/Formas básicas/Señal de prohibido, el círculo con diagonal que se muestra en la figura anterior y luego píntela con la herramienta de color de relleno, de color Rojo. Además haga un clic derecho en este botón y elija Formato de autoforma , luego en la ficha Proteger desactive la casilla Bloqueada.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 105
48. Luego ingrese al Editor de Visual Basic con Alt+F11 y escriba en la hoja de Módulo las siguientes macros: Sub Ingreso() N = Application.WorksheetFunction.CountA(Range("Ingreso")) If N = 5 Then End Range("Horas").Select ActiveCell.Select While ActiveCell <> Empty ActiveCell.Offset(1, 0).Activate Wend On Error GoTo Sale ActiveCell = Now: Selection.NumberFormat = "h:mm AM/PM" Range("A1").Select Sale: End Sub Sub Salida() N = Application.WorksheetFunction.CountA(Range("Salida")) If N = 5 Then End Range("Horas").Select ActiveCell.Select ActiveCell.Offset(0, 1).Activate While ActiveCell <> Empty ActiveCell.Offset(1, 0).Activate Wend If ActiveCell.Offset(0, -1) = Empty Then End ActiveCell = Time: Selection.NumberFormat = "h:mm AM/PM" Range("A1").Select End Sub Sub Falta() N = Application.WorksheetFunction.CountA(Range("Ingreso")) If N = 5 Then End Range("Horas").Select ActiveCell.Select While ActiveCell <> Empty ActiveCell.Offset(1, 0).Activate Wend On Error GoTo Sale ActiveCell = "Faltó" ActiveCell.Offset(0, 1) = "Faltó" Range("A1").Select Sale: End Sub Sub BorraTodo() Rpta = MsgBox("Seguro desea Borrar todo?", _ vbYesNo + vbCritical + vbDefaultButton2) If Rpta = vbNo Then End On Error GoTo Sale Range("Horas").ClearContents Range("ChDctos") = True
Elaborado por: Daniel Zegarra Zavaleta
Pág. 106
Range("ChExtras").ClearContents Sale: End Sub Sub QuitarSeguro() ActiveSheet.Unprotect ActiveSheet.Shapes("LLAVE").Select Selection.OnAction = "PoneSeguro" Range("a1").Select MsgBox "Protección ha sido retirada" End Sub Sub PonerSeguro() ActiveSheet.Protect Password:="MACRO", DrawingObjects:=True, _ Contents:=True ActiveSheet.Shapes("LLAVE").Select Selection.OnAction = "QuitaSeguro" Range("a1").Select ActiveWorkbook.Save MsgBox "La Hoja se encuentra protegida" End Sub
49. Regrese a la Hoja Semana de Excel y a cada uno de los botones Ingreso, Falta, Salida y Borrar todo, asígnele su respectiva macro. 50. A la autoforma “señal de prohibido” (circulo con diagonal rojo) asígnele la macro PonerSeguro . 51. Ejecute la macro BorrarTodo haciendo un clic en el botón correspondiente. 52. Vuelva a guardar el archivo Vigilancia con Ctrl.+G. Ahora estamos listos para empezar a registrar las horas de ingreso y salida del vigilante. Sin embrago, con la finalidad de que nadie mas que usted sea el que se encargue de llevar el control, el cuadro deberá estar protegido constantemente para que nadie pueda modificar su contenido. Veamos…, si realmente fuera la hora de ingreso en este instante habria que hacer un clic en el botón Ingreso y se escribiría automaticamente la hora en la celda correspondiente del dia Lunes. Sino, haga un clic en la lista desplegable y elija como hora de ingreso las 7:48 am. Luego, para proteger el cuadro bastará con hacer un clic en el botón de Señal de Prohibido y listo. La hoja quedará protegida y además el archivo Vigilancia se habrá grabado también automáticamente en disco. En pantalla aparecerá un mensaje indicando que la hoja ha quedado protegida. Cuando se desee quitar la protección, vuelva a presionar el botón de Señal de Prohibido y cuando le solicite la contraseña escriba la palabra MACRO, que coincide con la palabra que se escribió tambien en la macro QuitarSeguro de Visual Basic. Esta palabra clave usted la puede cambiar cuando quiera alli en visual basic, y con ella se podrá quitar la protección a la hoja. Una vez retirada la protección, en la pantalla aparecerá un mensaje indicando que la hoja se encuentra sin protección y entonces podrá usted seguir ingresando las demás horas, tanto de Elaborado por: Daniel Zegarra Zavaleta
Pág. 107
salida como de ingreso a medida que pasen los dias. Una vez ingresada una fecha recuerde que debe volver a conectar la protección con un clic en el botón correspondiente. Si las formulas en la hoja han sido escritas correctamente, los cálculos deberán realizarse automáticamente. Las celdas que definen las condiciones de pago y que usted puede cambiar son las siguientes: La celda B2: Nombre del Vigilante La celda C3: hora de ingreso oficial (actualmente 8:00 am) La celda D3: hora de salida oficial (actualmente 4:00 pm) La celda B12: Jornal diario (actualmente 90 soles) • • • •
Elaborado por: Daniel Zegarra Zavaleta
Pág. 108
Resumen de tipos de datos La tabla siguiente muestra los tipos de datos compatibles, incluyendo el tamaño de almacenamiento y el intervalo. Tamaño de almacenamiento 1 byte 2 bytes 2 bytes
0 a 255 True o False -32,768 a 32,767
4 bytes
-2,147,483,648 a 2,147,483,647
4 bytes
-3.402823E38 a –1.401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos
Double (coma flotante/ precisión doble)
8 bytes
-1.79769313486231E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos
Currency (entero a escala)
8 bytes
-922,337,203,685,477.5808 a 922,337,203.685,477.5807
Tipo de datos Byte Boolean Integer Long (entero largo) Single (coma flotante/ precisión simple)
Intervalo
+/-79,228,162,514,264,337,593,543,950,335 sin punto decimal; +/-7.9228162514264337593543950335 con 28 posiciones a la derecha del signo decimal; el número más pequeño distinto de cero es +/-0.0000000000000000000000000001 1 de enero de 100 a 31 de diciembre de 9999 Cualquier referencia a tipo Object
Decimal
14 bytes
Date Object String (longitud variable)
8 bytes 4 bytes 10 bytes + longitud de la Desde 0 a 2.000 millones cadena
String (longitud fija)
Longitud de la cadena
Desde 1 a 65,400 aproximadamente
Variant (con números)
16 bytes
Cualquier valor numérico hasta el intervalo de un tipo Double
Variant (con caracteres) Definido por el usuario (utilizando Type)
22 bytes + longitud de la El mismo intervalo que para un tipo String de cadena longitud variable Número requerido por los elementos
El intervalo de cada elemento es el mismo que el intervalo de su tipo de datos.
Las matrices de cualquier tipo de datos requieren 20 bytes de memoria más cuatro bytes para cada dimensión de matriz, más el número de bytes que ocupan los propios datos. Puede calcular la memoria que ocupan los datos multiplicando el número de elementos de datos por el tamaño de cada elemento. Por ejemplo, los datos de una matriz unidimensional que consten de cuatro elementos de datos tipo Integer de dos bytes cada uno, ocupan ocho bytes. Los ocho bytes que requieren los datos más los 24 bytes necesarios para la matriz suman un requisito total de memoria de 32 bytes para dicha matriz . Un tipo Variant que contiene una matiz requiere 12 bytes más que la matriz por sí sola. Nota
Nota
Use la funnción StrConv para converter un dato sting a otro tipo de dato
Elaborado por: Daniel Zegarra Zavaleta
Pág. 109
Funciones de conversión de tipos de datos Cada función convierte una expresión a un tipo de datos específico. Sintaxis CBool(expresión)
CByte(expresión)
CCur(expresión)
CDate(expresión)
CDbl(expresión)
CDec(expresión)
CInt(expresión)
CLng(expresión)
CSng(expresión)
CStr(expresión)
CVar(expresión) Donde, el argumento obligatorio expresión es cualquier expresión de cadena o expresión numérica. Tipos devueltos El nombre de la función determina el tipo devuelto, como se muestra a continuación: Función CBool CByte CCur CDate
Tipo devuelto Boolean Byte Currency Date
CDbl
Double
CDec
Decimal
CInt
Integer
CLng
Long
CSng
Single
CStr
String
CVar
Variant
Intervalo del argumento expresión Cualquier expresión de cadena o numérica válida. 0 a 255. -922.337.203.685.477,5808 a 922.337.203.685.477,5807. Cualquier expresión de fecha. -1.79769313486231E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. +/-79.228.162.514.264.337.593.543.950.335 para números basados en cero, es decir, números sin decimales. Para números con 28 decimales, el intervalo es +/-7,9228162514264337593543950335. La menor posición para un número que no sea cero es 0,0000000000000000000000000001. -32.768 a 32.767; las fracciones se redondean. -2.147.483.648 a 2.147.483.647; las fracciones se redondean. -3,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos. El mismo intervalo que Double para valores numéricos. El mismo intervalo que String para valores no numéricos. El valor de retorno de CStr depende del argumento expresión.
Comentarios
Si la expresión del argumento expresión que se pasa a la función está fuera del intervalo del tipo de dato al que se va a convertir, se producirá un error. Elaborado por: Daniel Zegarra Zavaleta
Pág. 110
En general, el código se puede documentar utilizando las funciones de conversión de tipos de datos para indicar que el resultado de alguna de las operaciones se debería expresar como un tipo de datos en particular, no como el tipo de datos predeterminado. Por ejemplo, utilice Ccur para forzar la ejecución de operaciones con aritmética monetaria en los casos en los que se haría con precisión simple, doble precisión o aritmética entera. Debe utilizar funciones de conversión de tipos en lugar de Val para proporcionar conversiones que reconozcan las variantes internacionales. Por ejemplo, cuando utiliza CCur, se reconocen diferentes separadores decimales, diferentes separadores de millares y varias opciones monetarias dependiendo de la configuración regional establecida en su equipo. Cuando la parte fraccionaria es exactamente 0,5, CInt y CLng siempre redondean al número par más cercano. Por ejemplo, 0,5 redondea a 0, y 1,5 redondea a 2. CInt y CLng se diferencian de las funciones Fix y Int en que truncan la parte fraccionaria de un número, en lugar de redondear. Además, Fix y Int siempre devuelven un valor del mismo tipo del que se le pasa. Utilice la función IsDate para determinar si se puede convertir date a una fecha o una hora. CDate reconoce literales de fecha y literales de hora además de números comprendidos dentro del intervalo de fechas aceptables. Al convertir un número a una fecha, la parte numérica entera se convierte a una fecha. Cualquier parte fraccionaria del número se convierte a la hora del día, comenzando a medianoche.
CDate reconoce formatos de fecha que se ajusten a la configuración regional de su sistema. Es posible que no se determine el orden correcto del día, mes y año si se proporciona en un formato diferente del que reconoce la configuración de fecha. Además, no se puede reconocer un formato de fecha largo si contiene la cadena del día de la semana. Se proporciona una función CVDate por compatibilidad con versiones anteriores de Visual Basic. La sintaxis de la función CVDate es idéntica a la de la función CDate; sin embargo, CVDate devuelve un Variant de subtipo Date en lugar del tipo Date real. Puesto que ahora hay un tipo de dato intrínseco Date, no es necesario CVDate. Se puede observar el mismo efecto al convertir una expresión a Date y asignarla después a un Variant. Esta técnica es coherente con la conversión de todos los demás tipos intrínsecos a sus equivalentes subtipos Variant.
Nota
La función CDec no devuelve un tipo de dato discreto; en su lugar, siempre devuelve un Variant con los valores convertidos a un subtipo Decimal.
Conversión, resumen de palabras clave Acción Valor ANSI a cadena. Cadena a minúsculas o a mayúsculas. Fecha a número de serie. Número decimal a otra base. Número a cadena. Un tipo de dato a otro. Fecha a día, mes, día de la semana o año. Hora a hora, minuto o segundo. Cadena a valor ASCII. Cadena a número. Hora a número de serie.
Elaborado por: Daniel Zegarra Zavaleta
Palabras clave Chr Format, LCase, UCase DateSerial, DateValue Hex, Oct Format, Str CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int Day, Month, Weekday, Year Hour, Minute, Second Asc Val TimeSerial, TimeValue
Pág. 111
Equivalencia de Funciones en Español e Inglés Español
Inglés
Sintaxis
Descripción
= BUSCARH
=HLOO KUP
= HLOOKUP(dat o,tabla de busqueda,#fila,modo de busqueda)
= BUS CA RV
=V LOOKU P
= VLOOK UP(dato,tabl a de busqueda,#col um na,modo de busqueda)
Busca horizontalmente datos en una tabla Busca verticalmente datos en una tabla
=AHORA
=NOW
=NOW()
Da la fecha y hora actuales
=ALEATORIO
=RAND
=RAND()
Crea un numero al azar entre 0 y 1
=COCIENTE
=COCIENTE
=COCIENTE(dividendo,divisor)
Calcula la parte entera de una división
=COLUMNA
=COLUMN
=COLUMN(celda o rango)
Indica en que columna se encuentra la referencia dada
=COLUMNAS
=COLUMNS
=COLUMNS(celda o rango)
Indica cuantas columnas tiene el rango dado
= CONC AT ENA R
=CO NCAT ENAT E
= CO NCA TENA TE( text o1, text o2, …)
Une los textos de varias celdas
=CONTAR
=COUNT
=COUNT(rango)
Cuenta celdas con datos tipo numero
=CONTAR.SI
=COUNTIF
=COUNTIF(rango de busqueda,dato)
Cuenta celdas que cumplen con un criterio
=CONTARA
=COUNTA
=COUNTA(rango)
Cuenta celdas ocupadas en un rango
=DERECHA
=RIGHT
=RIGHT(texto,#caracteres)
Extrae caracteres indicados del lado derecho de un texto
=DIASEM
=WEEKDAY
=WEEKDAY(fecha)
=ELEGIR
=CHOOSE
=CHOOSE(numero,accion1,accion2,…)
=ENTERO
=INT
=INT(valor)
Da respuestas enteras ignorando los decimales
=ESBLANCO
=ISBLANK
=ISBLANK(celda)
Da verdadero si una celda esta vacía
=ESERROR
=ISERROR
=ISERROR(celda o formula)
=ESNUMERO
=ISNUMBER
=ISNUMBER(celda o formula)
Da verdadero si una celda contiene un numero
=ESTEXTO
=ISTEXT
=ISTEXT(celda o formula)
Da ver dadero si una celda contiene texto
=EXTRAE
=MID
=MID(texto,posicion inicial ,#caracteres)
Extrae caracteres indicados del interior de un texto
=FILA
=ROW
=ROW(celda o rango)
Indica en que fila se encuentra la referencia dada
Indica el dia de la semana (1 al 7) de una fecha Elige la alternativa que se indique en el primer argumento
Da verdadero si una celda contiene error
=FILAS
=ROWS
=ROWS(celda o rango)
Indica cuantas filas tiene el rango dado
=HOY
=TODAY
=TODAY()
Da la fecha actual
=INDIRECTO
=INDIRECT
=INDIRECT(celda)
=IZQUIERDA
=LEFT
=LEFT(texto,#caracteres)
Extrae caracteres indicados del lado izquierdo de un texto
=K.ESIMO.MAYOR
=LARGE
=LARGE(rango,posición)
Encuentra uno de los numeros mayores según posición que se indique
=K.ESIMO.MENOR
=SMALL
=SMALL(rango,posición)
Encuentra uno de los numeros menores según posición que se indique
=MAX
=MAX
=MAX(rango)
Encuentra el valor maximo
=MES
=MONTH
=MONTH(fecha)
Indica el mes (1 al 12) de una fecha
=MIN
=MIN
=MIN(rango)
Encuentra el valor minimo
=O
=OR
=OR(expresiones logicas)
=PI
=PI
=PI()
=POTENCIA =PROMEDIO
=POWER =AVERAGE
=POW ER(numero,potencia) =AVERAGE(rango)
= PRO NOSTICO
=FORECAST
=FO RECAST(x, valores x, v alores y)
Calcula o predice un valor futuro en una tendencia lineal usando valores existentes
=RAIZ
=SQRT
=SQRT(valor)
Calcula la raiz cuadrada
=REDONDEAR
=ROUND
=ROUND(valor,#decimales)
Redondea una cantidad a los decimales que se indiquen
= RED ONDEAR.MA S
=RO UNDUP
= ROUND UP(v al or,#decim al es)
Redondea al numero inmediato superior según la cantidad de decimales que se indique
=REDONDEAR.MENOS
=ROUNDDOWN
=ROUNDDOWN(valor,#decimales)
Redondea al numero inmediato inferior según la cantidad de decimales que se indique
Elaborado por: Daniel Zegarra Zavaleta
Extrae la referencia escrita en una celda
Da verdadero si una de las expresiones es verdadera Numero Pi: 3.1415926…. Eleva un numero a una potencia Calcula el promedio de varios numeros
Pág. 112
Teclas de Función en Microsoft Excel
Función
Tecla
Abrir ventana de ayuda Modificar la celda activa Pegar un nombre en una formula Repetir la ultima acción Ir a Ir al siguiente Panel Menú Herramientas/ Ortografía Ampliar una selección de celdas Calcular todas la hojas de todos los libros abiertos Activar la barra de menú Crear un grafico Menú Archivo/ Guardar como
Tecla
Shift
Ctrl Abrir o cerrar el Panel de Tareas
Modificar el comentario de la celda activa Pegar una función en una formula Repetir el ultimo Buscar (Buscar siguiente) Menú Edición/Buscar Ir al Panel Anterior
Agregar selecciones múltiples de celdas Calcular la hoja activa Presentar un menú contextual Insertar una nueva hoja de calculo Menú Archivo/ Guardar (Ctrl+G)
Función
Elaborado por: Daniel Zegarra Zavaleta
Shift
Definir un nombre de rango Cerrar la ventana del libro actual Restaurar el tamaño de la ventana Ir a la siguiente ventana del libro Mover la ventana del libro actual
Alt Insertar una hoja de grafico Menú Archivo/Guardar como Menú Insertar/Nombre/Crear Cerrar la ventana de Excel
Ir a la primera ventana del libro anterior
Cambiar el tamaño de la ventana Minimizar la ventana del libro activo Maximizar o restaurar la ventana del libro actual Insertar una hoja de Macros (Excel 4.0) Menú Archivo/ Abrir
Mostrar la ventana de diálogo Macro
Ctrl
Alt
Abrir el Editor de Visual Basic
Pág. 113
Códigos ASCII para caracteres especiales: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
☺ ☻ ♥ ♦ ♣ ♠ •
◘ ○ ◙ ♂ ♀ ♪ ♫ ☼ ► ◄ ↕ ‼
¶ §
▬ ↨ ↑ ↓
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
→ ← ∟ ↔ ▲ ▼ ! " # $ % & ( ) * + , . 0 1 2 3
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
3 76 L 101 e 126 ~ 151 ù 176 ░ 201 ╔ 226 Ô 4 77 M 102 f 127 ⌂ 152 ÿ 177 ▒ 202 ╩ 227 Ò 5 78 N 103 g 128 Ç 153 Ö 178 ▓ 203 ╦ 228 õ 6 79 O 104 h 129 ü 154 Ü 179 │ 204 ╠ 229 Õ 7 80 P 105 i 130 é 155 ø 180 ┤ 205 ═ 230 µ 8 81 Q 106 j 131 â 156 £ 181 Á 206 ╬ 231 þ 9 82 R 107 k 132 ä 157 Ø 182 Â 207 ¤ 232 Þ : 83 S 108 l 133 à 158 × 183 À 208 ð 233 Ú ; 84 T 109 m 134 å 159 ƒ 184 © 209 Ð 234 Û < 85 U 110 n 135 ç 160 á 185 ╣ 210 Ê 235 Ù = 86 V 111 o 136 ê 161 í 186 ║ 211 Ë 236 ý > 87 W 112 p 137 ë 162 ó 187 ╗ 212 È 237 Ý ? 88 X 113 q 138 è 163 ú 188 ╝ 213 ı 238 ¯ @ 89 Y 114 r 139 ï 164 ñ 189 ¢ 214 Í 239 ´ A 90 Z 115 s 140 î 165 Ñ 190 ¥ 215 Î 240 B 91 [ 116 t 141 Ä 166 ª 191 ┐ 216 Ï 241 ± C 92 \ 117 u 142 Ä 167 º 192 └ 217 ┘ 242 ‗ D 93 ] 118 v 143 Å 168 ¿ 193 ┴ 218 ┌ 2 43 ¾ E 94 ^ 119 w 144 É 169 ® 194 ┬ 219 █ 244 ¶ F 95 _ 120 x 145 æ 170 ¬ 195 ├ 220 ▄ 245 ì G 96 ` 121 y 146 Æ 171 ½ 196 ─ 221 ¦ 246 ÷ H 97 a 122 z 147 ô 172 ¼ 197 ┼ 222 Ì 247 ¸ I 98 b 123 { 148 ö 173 ¡ 198 ã 223 ▀ 248 ° J 99 c 124 | 149 ò 174 « 199 Ã 224 Ó 249 ¨ K 100 d 125 } 150 û 175 » 200 ╚ 225 ß 250 ·
251 ¹ 252 ³ 253 ² 254 ■ 255
Teclas de Método Abreviado: Alt + Enter.Ctrl + Enter.-
Para escribir en la siguiente línea dentro de la celda actual. Para escribir un mismo dato simultáneamente en todas las celdas previamente seleccionadas. Ctrl + asterisco.Para seleccionar la región actual. (Llámese región a un grupo rectangular de celdas ocupadas consecutivamente). Ctrl + G.Guarda el documento actual en el mismo destino donde fue guardado la última vez. Ctrl + espacio.Selecciona íntegramente todas las columnas del rango seleccionado. Shift + espacio.Selecciona íntegramente todas las filas del rango seleccionado. Ctrl + Shift + espacio.- Selecciona íntegramente todas las celdas de la hoja actual. Ctrl + Shift + ; .Escribe la fecha actual en la celda activa. Ctrl + Shift + : .Escribe la hora actual en la celda activa, pero como un dato del tipo texto. Ctrl + flecha.Desplaza el puntero de celda hasta la última celda ocupada en la dirección de la flecha. Ctrl + Shift + flecha.- A partir de la celda actual selecciona todas las celdas hasta la última celda ocupada en la dirección de la flecha.
Elaborado por: Daniel Zegarra Zavaleta
Pág. 114
Contenido Contenido del Curso .................................................................................................................. 1 1.
La Programación en Excel .......................................................... .................................. 3 a.
Uso de la grabadora de macros ........................................................................................... 3
b.
Que es la grabadora de macros ........................................................................................... 3
c.
Ejecución de una macro ...................................................................................................... 3
d.
Cómo es el programa creado por la grabadora de macros ................................................... 5
e.
Como ver el programa en el Editor de Visual Basic .............................................................. 5
f.
Cómo eliminar una macro ................................................................................................... 7
Ejercicio Nº 1: Acciones repetitivas con macros ........................................................................... 8
2.
Escritura de programas en el Editor de Visual Basic ................................................... 11 a.
Que es Visual Basic para Aplicaciones................................................................................ 11
b.
El Editor de Visual Basic..................................................................................................... 11
3.
Las instrucciones de Visual Basic................................................................................ 12 a.
Continuar instrucciones en múltiples líneas....................................................................... 13
b.
Añadir comentarios........................................................................................................... 13
c.
Comprobar errores de sintaxis .......................................................................................... 14
4.
Escribir instrucciones de declaración ....................................................... ................... 14 a.
Qué son los tipos de datos Variant .................................................................................... 15
5.
Escribir instrucciones de asignación .......................................................... ................. 15
6.
Trabajo con celdas en Visual Basic .......................................................... ................... 16 a.
Referencia a celdas y rangos utilizando la notación A1 ...................................................... 16
b.
Sentencias usadas para manejar celdas y rangos de celdas................................................ 17
7.
Para seleccionar celdas y rangos de celdas ................................................................ 17 a.
Selección directa de celdas y rangos .................................................................................. 17
b.
Selección de rangos de manera relativa:............................................................................ 18
c.
Selección consecutiva de celdas ocupadas o vacías: .......................................................... 19
d.
Selección directa de Columnas .......................................................................................... 19
e.
Selección relativa de Columnas ......................................................................................... 19
f.
Selección directa de Filas................................................................................................... 20
g.
Selección indirecta de Filas................................................................................................ 20
h.
Para desplazar el puntero de celda:................................................................................... 21
i.
Para borrar rangos de celdas:............................................................................................ 22
Elaborado por: Daniel Zegarra Zavaleta
Pág. 115
j.
Para eliminar filas o columnas enteras: ............................................................................. 22
k.
Para insertar filas o columnas:........................................................................................... 23
l.
Para nombrar un rango de celdas:..................................................................................... 23
Ejercicio Nº 2: Procedimientos Sub para seleccionar rangos...................................................... 24 La Propiedad End....................................................................................................................... 30 Ejercicio Nº 3: Nombrar rangos, Seleccionar columnas y Borrar ............................................... 31 m.
Para ingresar datos en celdas y rangos de celdas............................................................... 34
Ejercicio Nº 4: Asignar valores a celdas y rangos ....................................................................... 34 n.
Usos del método Select y la propiedad Selection............................................................... 36
Ejercicio Nº 5: Procedimientos Sub para Cambio de moneda .................................................. 38 Ejercicio Nº 6: Procedimientos Sub para Ahorro personal ......................................................... 41
8.
Uso de funciones de hoja de cálculo de Microsoft Excel en Visual Basic ..................... 44 a.
Lista de las funciones de hoja de cálculo que se pueden usar en Visual Basic..................... 44
b.
Como llamar a una función de hoja de cálculo desde Visual Basic...................................... 46
c.
Insertar una función de hoja de cálculo en una celda......................................................... 47
d.
La Función InputBox.......................................................................................................... 47
e.
El Método InputBox .......................................................................................................... 48
Ejercicio Nº 7 ‐ Pago de un préstamo hipotecario..................................................................... 51
9.
Funciones propias de Visual Basic ........................................................... ................... 54 a.
10.
Lista breve de las funciones más comunes .........................................................................................54
Estructuras de Control en las instrucciones macro.................................................. 56
f.
Que son las sentencias de control ..................................................................................... 56
g.
Que hacen las Instrucciones Condicionales........................................................................ 56
h.
Que hacen las Instrucciones de Bucle ................................................................................ 56
i.
Que hacen las Instrucciones de ejecución múltiple ............................................................ 56
11.
La Instrucción If...Then...Else .............................................................. .................... 57
a.
Como usar las instrucciones If...Then...Else ....................................................................... 58
b.
Ejecutar una sola instrucción cuando la condición es Verdadera........................................ 58
c.
Ejecutar unas instrucciones si la condición es Verdadera y ejecutar otras si es Falsa.......... 59
d.
Comprobar una segunda condición si la primera condición es Falsa................................... 59
12.
La Instrucción While...Wend................................................................................... 60
13.
La Instrucción For...Next......................................................................................... 60
a.
14. a.
Como usar las instrucciones For...Next .............................................................................. 62
La Instrucción Select Case....................................................................................... 63 Como usar la instruccion Select Case ................................................................................. 64
Elaborado por: Daniel Zegarra Zavaleta
Pág. 116
15.
La Instrucción Do...Loop ...................................................... ................................... 65
a.
Como usar las instrucciones Do...Loop .............................................................................. 66
b.
Repetir instrucciones mientras una condición es Verdadera.............................................. 66
c.
Para repetir instrucciones hasta que una condición llegue a ser Verdadera ....................... 67
d.
Para salir de Do...Loop desde dentro del bucle.................................................................. 67
16.
La instrucción For Each...Next ................................................................................ 68
a.
Como usar las instrucciones For Each...Next...................................................................... 69
b.
Para recorrer un conjunto de elementos ........................................................................... 69
c.
Para salir de un bucle For Each...Next antes de que finalice............................................... 70
17. a.
18.
La instrucción With ................................................................................................ 71 Como usar las instrucciones With...................................................................................... 71
Creación de formularios userforms......................................................................... 74
a.
Para crear un formulario ................................................................................................... 74
b.
Para diseñar un formulario................................................................................................ 74
Ejercicio Nº 8 ‐ Llenar un Registro de alumnos ......................................................................... 75 Práctica De Laboratorio Nº1 ...................................................................................................... 80 1ra Parte:
Creación el Cuadro de Viajes y la Tabla de Tarifas ................................................. 81
2da Parte:
Grabar la macro que registre las carreras en el Cuadro de Viajes........................... 82
Práctica De Laboratorio Nº2 ...................................................................................................... 86 Práctica De Laboratorio Nº3 ...................................................................................................... 89 Práctica De Laboratorio Nº4 ...................................................................................................... 95 Práctica De Laboratorio Nº5 ...................................................................................................... 99 1ra Parte:
Creación del Cuadro de Pago por Vigilancia........................................................... 99
2da Parte:
Creación de macros para automatizar el Cuadro ................................................. 105
Resumen de tipos de datos...................................................................................................... 109 Funciones de conversión de tipos de datos.............................................................................. 110 Conversión, resumen de palabras clave................................................................................... 111 Equivalencia de Funciones en Español e Inglés ........................................................................ 112 Teclas de Función en Microsoft Excel....................................................................................... 113 Códigos ASCII para caracteres especiales:................................................................................ 114 Teclas de Método Abreviado:.................................................................................................. 114 Contenido ............................................................................................................................... 115
Elaborado por: Daniel Zegarra Zavaleta
Pág. 117