Sunteți pe pagina 1din 118

Contenido del Curso

Microsoft Excel Programacin Visual Basic Inicial

1. Cmo 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 de Visual Basic de Excel
b. Qu es un programa en Visual Basic
c. Estructura de un programa para Excel
d. El Cdigo en Visual Basic
i. Sentencias de Declaracin
ii. Sentencias de Asignacin
iii. Sentencias Ejecutables
e. La ventana Explorador de Proyectos
f. Ejecucin de macros paso a paso

4. Manejo de Rangos, Hojas y Archivos


a. Propiedades y Mtodos
b. Seleccin de rangos: Directa y relativa
c. Desplazamiento y seleccin: Propiedad Rango y Offset
d. Nombres de rangos y nombres 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 clculo en Visual Basic

5. Sentencias de Control
a. If...thenelse
b. Select Case

Elaborado por: Daniel Zegarra Zavaleta Pg. 1


c. Do While/Until
d. For Next
e. For Each Next
f. With End With

6. Uso de botones de formulario


a. Ejecucin de macros con botones de formulario

7. Las funciones MsgBox e InputBox


a. Cajas de salida de informacin MsgBox
b. Cajas de ingreso de informacin InputBox

8. Creacin de formularios UserForm


a. Herramientas de formularios
b. La ventana Propiedades
c. Diseo de formularios interactivos

Elaborado por: Daniel Zegarra Zavaleta Pg. 2


1. La Programacin en Excel
a. Uso de la grabadora de macros
A pesar que la programacin 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 o el mouse. Todo lo que se
realice ser grabado como un grupo de acciones que luego podrn 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 grabacin hacer un clic en el botn: , o llamar al men


Herramientas/Macro/Finalizar grabacin, con lo cual deber desaparecer el
mensaje Grabando en la barra de estado.
Nota.- Las macros al ser creadas pueden grabarse en el libro actual, como se puede apreciar en la
ventana de dialogo anterior en la opcin: Este libro , con lo cual la macro solo funcionar en
ese libro; o tambin se pudo elegir en la ventana de dilogo la opcin: Libro de macros
personal, para cuyo caso la macro podra funcionar tambin 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 con ello memoria al computador innecesariamente quizas.

Una vez creada, veamos a continuacin como se hace para que la macro funcione:

c. Ejecucin 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 botn
Ejecutar.

Elaborado por: Daniel Zegarra Zavaleta Pg. 3


Sin embargo, un modo mas controlado y fcil de ejecutar una macro es asignndola a
un elemento de imagen, como puede ser a un dibujo de Autoformas, a un botn de
herramientas personalizado o incluso hasta a un grfico.
Para asignar una macro a un botn de Autoformas realizar lo siguiente:

Clic derecho
----------------
----------------
----------------
Asignar macro...
----------------
----------------

1.- Sealar con el mouse el borde del botn y hacer un clic derecho para llamar al
men contextual
2.- En el men elegir la opcin Asignar 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 celda un dato.
2.- Llame al men
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 accin de
centrado, esto es: llamar al men
Formato/Celdas y en la ficha Alineacin
elegir en la opcin Alineacin del texto
Vertical, la alternativa Centrar, luego elegir
el botn Aceptar.

Elaborado por: Daniel Zegarra Zavaleta Pg. 4


4.- Finalmente terminar la macro con el botn Detener grabacin o con el men
Herramientas/ Macro/Detener grabacin.
5.- A continuacin dibuje en la
hoja un botn con Autoformas y
haciendo un clic derecho en l,
asgnele la macro CentradoVertical.
6.- Ahora, al escribir en una celda
un dato podr centrar el dato
verticalmente haciendo un clic
en el botn de la macro.

d. Cmo 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 habra generado automticamente, sera el siguiente:

Sub CentradoVertical()
'
' Macro creada por Daniel Zegarra - UNI
'
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
End Sub
Este programa se encontrara escrito en una hoja de Modulo insertada dentro del libro
actual de Excel, y para ver esta hoja de mdulo habra 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 botn de Modificar de la
ventana de dialogo.

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 vaca, llamar al
men Ver y elegir la opcin 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 conteniendo el cdigo en Visual Basic de la macro.

Elaborado por: Daniel Zegarra Zavaleta Pg. 6


f. Cmo 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 botn Eliminar. Finalmente hacer clic en el botn 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 consultndonos 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 Pg. 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
sern de gran ayuda.
Suponga que se dispone de una lista diaria de clientes que asisten durante un mes a
realizar sus compras a una zapatera, y se desea ordenar esta lista en grupos semanales,
y cada semana ordenada descendentemente segn 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 zapatera.


1.- En una hoja en blanco escriba lo siguiente:

2.- Seleccionando la celda A5, llame al men Formato/Celdas y en la ficha Nmero,


categora personalizada, disee el siguiente formato en la casilla Tipo:
ddd dd mmm
La fecha aparecer como:
Mi 01 Jun

3.- Luego con el botn


derecho del mouse
arrastre el cuadro de
relleno de la celda A5
hasta llegar a la celda
A26, y cuando al soltar el
botn del mouse
aparezca un men
contextual, elegir la
opcin Rellenar das de
la semana, para copiar
la serie de das laborales del mes de Junio. (Solo aparecern 5 das laborables en
cada semana)

Elaborado por: Daniel Zegarra Zavaleta Pg. 8


Luego en la columna B vamos a escribir la
cantidad de personas que asistieron cada da a
la zapatera. Para simular la cantidad de
personas vamos a hacer que Excel escriba
nmeros 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 Edicin/Copiar, luego en el men
Edicin/Pegado especial, marque la
opcin 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 mtodo
abreviado escriba la letra "k". Luego Aceptar
10.- Al aparecer el mensaje "Grabando" en la barra de
estado, verifique que se encuentre activado el botn de
herramientas Referencia relativa:

Elaborado por: Daniel Zegarra Zavaleta Pg. 9


11.- Luego realice los siguientes pasos:
Llamar al menu
Insertar/Fila
Seleccionar la celda A7 y
presionar las teclas Ctrl+*
para seleccionar la regin
actual (A5:B7)
Llamar al men
Datos/Ordenar y elegir
ordenar por Columna B, en
orden Descendente y
verifique que No se
considere tener fila de
encabezamiento. Luego haga clic en el botn 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 botn Detener
grabacin.
12.- Guarde el libro con el nombre de
archivo Asistencia.
Con esto ya tendremos ordenado el
primer grupo delos das
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 Pg. 10


2. Escritura de programas en el Editor de Visual Basic
a. Que es Visual Basic para Aplicaciones
Es un lenguaje de programacin 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 aplicacin se la conoce como una Macro (Macro instruccin 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 aplicacin adicional a Excel o a cualquier otra aplicacin de
Office, pero la macro que se crea a travs 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 mdulo, entonces proceda del siguiente modo:
1.- Llamar al men Ver/Explorador de proyectos.
2.- Llamar al men Insertar/Mdulo.

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 clculo, hojas de mdulos, formularios, etc.
La ventana de Mdulo es donde se escribirn las instrucciones que nos permitirn
crear las Macros en Visual Basic.

3. Las instrucciones de Visual Basic

Aclaracin 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 mquina inteligente, sta sin
embargo, no razona como lo hara 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 podra ordenarle a su hijo menor que por favor apague la
cocina.
Si su hijo aun es pequeo, cmo cree que hara 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 tendra que ser ms preciso en darle las instrucciones al pequeo para que pueda
apagar la cocina como es debido sin que ocurra ninguna desgracia, pues l quizs aun
no se percata exactamente del peligro que esta accin 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 ambigedades para que no lleven a errneas 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 nio "paga la
cocina". El no va a poder obedecernos porque no conoce como se realiza esa accin ya
que aun no maneja dinero y no sabe cmo se paga un artefacto. Esto es un error de
sintaxis, la palabra est mal escrita.
Pero adems las instrucciones deben seguir una cierta lgica adecuada porque si no
tambin se estara incurriendo en un error de lgica al escribir el programa.
Por ejemplo, un error de lgica podra ser que se le diga al nio: " por favor apaga la
cocina y luego srveme un caf". La orden aparentemente parece correcta. Pero el

Elaborado por: Daniel Zegarra Zavaleta Pg. 12


nio podra ir y apagar la luz de la cocina y luego intentar a oscuras servirme un caf.
Esto se conoce como un error de lgica. Entonces debimos haber dicho: "por favor
apaga la hornilla derecha de la cocina y luego srveme un caf". Algo as es como
funciona la lgica de un computador, y teniendo en cuenta todo esto es que se escriben
los programas de computadora.
Observe adems que la lgica empleada para dar rdenes a un nio en algn lugar de
nuestro planeta es independiente de si estas rdenes las damos en cualquier idioma, ya
sea en espaol, o ingls, o ruso o japons; dependiendo del lugar donde nos
encontremos. Es decir; el idioma puede ser diferente, pero la lgica es la misma.
La lgica 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 instruccin de Visual Basic puede incluir palabras clave, operadores, variables,
constantes y expresiones. Todas las instrucciones pertenecen a una de las tres
categoras siguientes:
1. INSTRUCCIONES DE DECLARACIN, que dan nombre a una variable,
constante o procedimiento y pueden tambin especificar su tipo de datos.
2. INSTRUCCIONES DE ASIGNACIN, que asignan un valor o expresin a una
variable o constante.
3. INSTRUCCIONES EJECUTABLES, que inician acciones. Estas instrucciones
pueden ejecutar un mtodo o funcin y pueden saltar o evitar bloques de cdigo.
Las instrucciones ejecutables a menudo contienen operadores condicionales o
matemticos.

a. Continuar instrucciones en mltiples lneas


Una instruccin cabe normalmente en una lnea, pero puede continuarse en la siguiente
lnea utilizando un carcter de continuacin de lnea que es un carcter de subrayado o
guin bajo ( _ ) precedido siempre por un espacio en blanco. En el siguiente ejemplo,
la instruccin ejecutable MsgBox se extiende dos tres lneas:
Guin 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. Aadir comentarios
Los comentarios pueden explicar un procedimiento o una instruccin en particular a
cualquier persona que tenga que leer el cdigo. Visual Basic ignora los comentarios
cuando ejecuta los procedimientos. Las lneas de comentario comienzan por un
apstrofe (') o con la palabra clave Rem seguida por un espacio y puede colocarse en
cualquier lugar del procedimiento. Para aadir un comentario a la misma lnea que
ocupa una instruccin, debe insertarse un apstrofe despus de esta, seguido por el
comentario. Los comentarios aparecen en pantalla en color verde, color predefinido.

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 despus de escribir una lnea de cdigo y esta lnea
aparece en pantalla en color rojo (puede que aparezca tambin un mensaje de error),
esto indica que se ha incurrido en un error de sintaxis, o sea la instruccin est mal
escrita y se debe observar cul es el problema en la instruccin y corregirlo.

4. Escribir instrucciones de declaracin


Las instrucciones de declaracin se usan para dar nombre y definir procedimientos,
variables, matrices y constantes. Cuando se declara un procedimiento, variable o
constante, tambin se define su alcance que depende del lugar en que se coloque la
declaracin 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 instruccin Sub, la instruccin Const y la instruccin Dim, son instrucciones de


declaracin.
La instruccin Sub (con la correspondiente instruccin 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 instruccin Const declara la constante Limite, especificando el tipo de datos
Integer y un valor de 33.
La instruccin 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 estn accesibles a la aplicacin que se est usando. Las
instrucciones Dim son un tipo de instruccin 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 Pg. 14


a. Qu son los tipos de datos Variant
El tipo de datos Variant se especifica automticamente 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 numricos, cadenas de texto, fecha,
hora o Booleans y pueden convertir los valores que contienen de forma automtica.
Los valores numricos Variant ocupan 16 bytes de memoria (lo que slo es
significativo en procedimientos grandes o mdulos complejos) y son ms lentos a la
hora de su acceso que las variables de tipo explcito 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 instruccin no declara explcitamente la variable EMPRESA, sino que la


declara implcitamente, o automticamente. Las variables que se declaran
implcitamente se especifican como del tipo de datos Variant.

Nota: Si se especifica un tipo de datos para una variable o argumento y a continuacin se utiliza un
tipo errneo de datos, se producir un error de tipo de datos. Para evitar errores de tipo de
datos, se deben usar slo variables (del tipo de datos Variant) o declarar explcitamente todas
las variables y especificar para ellas un tipo de datos. El ltimo mtodo es el preferible.

5. Escribir instrucciones de asignacin


Las instrucciones de asignacin, asignan (almacenan o guardan) un valor o expresin a
una variable o constante. Las instrucciones de asignacin 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 Pg. 15


Dim Nombre As String
Nombre = InputBox("Cmo se llama usted?")
MsgBox "Su nombre es " & Nombre
End Sub

La instruccin 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
instruccin 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 tambin instrucciones de


asignacin. 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 comn en Visual Basic especificar una celda o un rango de celdas, y a
continuacin realizar alguna accin en ellas, como ingresar un dato, escribir una
frmula o cambiar el formato. Normalmente esto se realiza en una instruccin que
primero identifica el rango y luego adems cambia una propiedad o aplica un mtodo
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 ms usuales de identificar y trabajar con
objetos Range.

a. Referencia a celdas y rangos utilizando la notacin A1


La siguiente tabla muestra algunas referencias de estilo A1 utilizando el mtodo
Range.
Referencia Significado
Range("A1") Celda A1
Range("A1:B4") Rango A1:B4

Elaborado por: Daniel Zegarra Zavaleta Pg. 16


Referencia Significado
Range("A1:B4,E3:F9") Mltiple 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") Mltiples filas 1, 3 y 8
Range("A:A,C:C,F:F") Mltiples 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 clculo
Columns(1) Columna uno
Columns("A") Columna uno
Columns Todas las columnas de la hoja de clculo

b. Sentencias usadas para manejar celdas y rangos de celdas


Los mtodos:
Range Select Activate
Clear ClearContents ClearFormats
Delete Insert
Las propiedades:
Selection ActiveCell CurrentRegion
Offset Columns, Rows Count

7. Para seleccionar celdas y rangos de celdas


a. Seleccin directa de celdas y rangos

Sintaxis: Range(referencia).Select
Donde: referencia puede ser un rango de celdas o un nombre de rango,
escritos entre comillas

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 escribindolo entre corchetes:

Sintaxis: [referencia].Select
Donde: 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. Seleccin de rangos de manera relativa:

Sintaxis: ActiveCell.Range(referencia).Select
Donde: referencia Es un rango de celdas que considera a la celda actual
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 regin actual


ActiveCell.CurrentRegion.Select

Elaborado por: Daniel Zegarra Zavaleta Pg. 18


c. Seleccin consecutiva de celdas ocupadas o vacas:

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 vacas hacia abajo, a partir de B4


Range("B4").Select
Range("B4", ActiveCell.End(xlDown)).Select

Selecciona todas las celdas ocupadas o vacas hacia abajo, a partir de B4


Range("B4", Range("B4").End(xlDown)).Select

Selecciona todas las celdas ocupadas o vacas 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. Seleccin 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. Seleccin 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 Pg. 19


Selection.EntireColumn.Select

Selecciona en la regin 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 regin 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. Seleccin 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. Seleccin 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 Pg. 20


h. Para desplazar el puntero de celda:

Uso de la sentencia Offset:

Sintaxis: Activecell.Offset(filas, columnas).Select


Donde: 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 condicin


intrucciones
Wend
Donde:
condicin Es una expresin numrica o expresin de cadena cuyo valor es
Verdadero o Falso. Si condicin es Null, condicin se considera
Falso.
instrucciones Opcional. Una o ms instrucciones que se ejecutan mientras la
condicin sea Verdadera.

Selecciona la primera celda vaca 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 Pg. 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: Referencia.Clear
Referencia.ClearContents
Referencia.ClearFormats
Donde: 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: Referencia.Delete
Donde: Referencia Es un rango de filas o columnas

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 Pg. 22


k. Para insertar filas o columnas:

Uso de la sentencia Insert:

Sintaxis: Referencia.Insert
Donde: 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 regin actual y le asigna el nombre CUADRO


ActiveCell.CurrentRegion.Select
ActiveWorkbook.Names.Add Name:="CUADRO", RefersTo:=Selection

Asigna el nombre CUADRO a la regin actual


ActiveWorkbook.Names.Add Name:="CUADRO", RefersTo:= _
ActiveCell.CurrentRegion

Elaborado por: Daniel Zegarra Zavaleta Pg. 23


Ejercicio N 2: Procedimientos Sub para seleccionar rangos

Vamos a suponer que usted no sabe nada de programacin, 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.- Dle 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 mdulo (Men Insertar/Mdulo).
4.- En la hoja de mdulo escriba el siguiente procedimiento Sub:

5.- Regrese a la hoja de clculo de Excel y seleccione la celda A1.

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 continuacin Clic en Ejecutar.

La macro se ejecutar y mover el puntero a la celda B4:


A continuacin presentamos una serie de ejemplos de procedimientos Sub para realizar
diversos tipos de seleccin de celdas. Para poder observar cual es el efecto de cada uno
de estos ejemplos, escrbalos 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 imgenes que aqu se muestran
en cada caso.

Ejemplos de procedimientos Sub para seleccionar celdas:

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 seleccin del rango anterior
Range("A3:C7").Select
Range("B5").Activate

Nota.- Para seleccionar un rango de celdas, use el mtodo Select. Para activar slo una celda, puede
utilizar el mtodo Activate. Si se activa una celda que se encuentra dentro del rango
seleccionado entonces no se pierde la seleccin, pero si la celda que se activa est fuera del
rango seleccionado la seleccin 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 Pg. 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 regin actual, (Regin 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 seleccin" 2 filas hacia abajo y una
columna hacia la derecha
Range("A3:C7").Select
Selection.Offset(2,1).Select

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 Pg. 28


12) Seleccionar la regin actual y luego seleccionar la celda en blanco situada al final
de la primera columna de la regin actual
ActiveCell.CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count, 0).Select

13) Seleccionar la regin actual y luego seleccionar la ltima celda ocupada al final de
la primera columna de la regin actual
ActiveCell.CurrentRegion.Select
ActiveCell.Offset(Selection.Rows.Count - 1, 0).Select

14) Suponiendo una tabla con una fila de encabezado, a continuacin se muestran 2
formas para seleccionar la tabla sin seleccionar la fila de encabezados. Debe haber
una celda activada en algn 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 Pg. 29


La Propiedad End

Desplaza el puntero a la celda situada al final de la regin que contiene el rango fuente.
Equivale a presionar las teclas FIN+FLECHA ARRIBA, FIN+FLECHA ABAJO,
FIN+FLECHA IZQUIERDA o FIN+FLECHA DERECHA.

Sintaxis:

Expresin.End(Direccin)

Donde:

Expresin.- Objeto a partir del cual se realizar el desplazamiento, (por ejemplo:


ActiveCell, Range("A3"), Selection).

Direccin puede ser una de las siguientes constantes:

xlUp hacia arriba


xlDown hacia abajo
xlToRight hacia la derecha
xlToLeft 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 regin que contiene la


celda B6
Range("B6").End(xlUp).Select
3) Selecciona la ltima celda de la derecha de la fila 4, en la regin que contiene la
celda A4
Range("A4").End(xlToRight).Select
4) Ampla la seleccin desde la celda B4 hasta la ltima celda ocupada hacia la
derecha
Range("B4", Range("B4").End(xlToRight)).Select

Elaborado por: Daniel Zegarra Zavaleta Pg. 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/Mdulo) 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 regin 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 despus 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 (Regin
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 regin actual. (Ubicar previamente el


puntero en cualquier celda dentro del cuadro)

Elaborado por: Daniel Zegarra Zavaleta Pg. 31


ActiveCell.CurrentRegion.Columns(2).Select

Nota.- Este ejemplo es semejante al anterior, con la diferencia que funciona para cualquier cuadro
sin importar su tamao, 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 que no
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 regin 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 Pg. 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 regin 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 Pg. 33


Range("C5:D7").ClearContents

m. Para ingresar datos en celdas y rangos de celdas


Uso de la Propiedad:
Formula
Uso de la funcin:
Date
Cuando se trabaja en la hoja de clculo de Microsoft Excel, usualmente hay que
seleccionar primero una o varias celdas y a continuacin realizar una accin 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,
slo necesita devolver el objeto Range y a continuacin 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 ttulos SERVICIOS y


PAGOS en las celdas A3 y B3, y finalmente el nmero 120 en la celda B4.
Range("A1") = "CUENTAS"
Range("A3") = "SERVICIOS"
Range("B3") = "PAGOS"
Range("B4") = 120

Nota.- Cuando se asigna un valor a un objeto la asignacin 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 Pg. 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 nmero 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 funcin 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 Pg. 35


Nota.- Cuando se escriben formulas en las instrucciones de Visual Basic, estas formulas debern
estar encerradas entre comillas dobles, los argumentos de las funciones siempre se escribirn
separados con comas y adems los nombres de las funciones debern estar escritas tal y como
se escribiran en la versin en ingls de Excel, es decir los nombres de funcin no se escriben
como las conocemos en espaol, sino en su equivalente segn la versin original. Por ejemplo:
SUMA como SUM
PROMEDIO como AVG
CONTAR como COUNT
ENTERO como INT
BUSCARV como VLOOKUP
SI como IF
REDONDEAR como ROUND
ESBLANCO como ISBLANK

Nota.- Si al escribir alguna formula en Visual Basic no se conoce su equivalente en ingls, lo que hay
que hacer es regresar a la ventana de Excel y encender la grabadora de macros, luego escribir
la frmula en espaol 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 versin en ingls.

n. Usos del mtodo Select y la propiedad Selection


El mtodo Select activa las hojas y los objetos de las hojas.
La propiedad Selection devuelve un objeto que representa la seleccin 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 continuacin, seleccionar un rango, u otro objeto, con el mtodo
Select.
La grabadora de macros suele crear una macro que utiliza el mtodo Select y la
propiedad Selection. El siguiente procedimiento Sub se cre utilizando la grabadora de
macros, y muestra cmo 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 Pg. 36


Range("A3") = "CLIENTE"
Range("B3") = "PAGOS"
Range("A3:B3").Font.Bold = True
End Sub

Este segundo ejemplo evidentemente es ms simple y a la vez ms 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 esttica y solo se vern que aparecen los datos en las celdas
correspondientes.

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 dlares.
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 clculo y dibuje un botn como el que se muestra en la figura
anterior (use Autoformas/Formas bsicas/Bisel)
5.- Asigne la macro Dolares a este botn.
Cuando haga un clic en el botn de la macro Dlares, 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
frmula, todos los clculos se realizaron en Visual Basic y en las celdas solamente aparecen
los resultados. Habr otros casos como ya se ver ms adelante en los cuales se va a desear
que la macro escriba tambin formulas en las celdas.

Elaborado por: Daniel Zegarra Zavaleta Pg. 38


Caso2:
Crear otro procedimiento en Visual Basic para convertir dlares a su equivalente en
soles.
1.- En la misma hoja de clculo 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 ocasin, 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 clculo y dibuje otro botn para la macro Soles como se
muestra en la figura anterior.
4.- Luego asigne la macro Soles a este segundo botn.
Cuando haga un clic en el botn de la macro Soles, se ejecutar el procedimiento y los
dlares de la celda B5 se convertirn a soles que aparecern 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 Pg. 39


Sub Borrar()
Range("b1:b3").ClearContents
Range("b1").Select
End Sub

2.- En la hoja de clculo dibuje otro botn para la macro Borrar como se muestra en
la siguiente figura:

3.- Luego asigne la macro Borrar a este botn.


Cuando haga un clic en el botn 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 Pg. 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 B4 Deposito
B5 Retiro B6 Actual
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 Depsito")
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 Depsito.
- 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 clculo y dibuje un botn como el que se muestra en la figura
anterior (use Autoformas/Formas bsicas/Bisel)
5.- Luego asigne la macro Ahorro a este botn.

Elaborado por: Daniel Zegarra Zavaleta Pg. 41


Cuando haga un clic en el botn de la macro Ahorro, ingrese un monto de depsito y si
desea tambin de retiro, y al aceptar aparecern los resultados en la hoja de clculo.
Nota.- Este procedimiento tal y como esta diseado, una vez que ya se ha ingresado un depsito y nos
est solicitando ingresar ahora el retiro, no nos da opcin a enmendar el anterior ingreso si es
que hubo un error en l. Ms adelante en otro ejercicio veremos como insertar instrucciones
condicionales que permitan abortar una transaccin o continuar ejecutndola.

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 depsitos o retiros efectuados da tras da, ser
necesario crear en la misma hoja de clculo un cuadro adicional de 4 columnas que
registre la fecha, los depsitos 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 clculo anterior lo siguiente:

7.- Ingrese a la ventana de Visual Basic y al procedimiento anterior agrguele las


siguientes instrucciones:
Sub Ahorro()
Range("Fecha") = Date
Range("Deposito") = InputBox("Ingrese Depsito")
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 depsito 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 Pg. 42


- Selecciona la regin actual
- Desplaza el puntero de celda hasta la ultima celda ocupada de la regin actual y
se ubica en una celda vaca de la columna A.
- En esa celda vaca de la columna A escribe la fecha actual
- Se desplaza una celda a la derecha de A y escribe el monto del depsito
- 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 clculo y haga un clic en el botn 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
funcin de cada grupo de instrucciones dentro de la macro. (Recuerde que los comentarios
deben empezar a escribirse con un apstrofe ().)
Sub Ahorro()
Range("Fecha") = Date
'Solicita datos
Range("Deposito") = InputBox("Ingrese Depsito")
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 Pg. 43


8. Uso de funciones de hoja de clculo de Microsoft Excel
en Visual Basic

Aunque el lenguaje de Visual Basic para aplicaciones tiene una lista propia de funciones
disponibles, habrn 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 mayora de las funciones de hoja de clculo de Microsoft Excel en las
instrucciones de Visual Basic.

a. Lista de las funciones de hoja de clculo que se pueden usar


en Visual Basic
A Buscar Despejar
Acos BuscarH DesvEst
Acosh BuscarV DesvEstP
Asen C Desvia2
Asenoh Coef.De.Correl DesvProm
Atan2 Coeficiente.Asime Dias360
tria DiaSem
Atanh
Coeficiente.R2 Dist.Weibull
B
Coincidir Distr.Beta
BDContar
Combinat Distr.Beta.Inv
BDContarA
Contar Distr.Binom
BDDesvEst
Contar.Blanco Distr.Chi
BDDesvEstP
Contar.Si Distr.Exp
BDExtraer
ContarA Distr.F
BDMax
Cosh Distr.F.Inv
BDMin
Covar Distr.Gamma
BDProducto
Crecimiento Distr.Gamma.Inv
BDPromedio
Cuartil Distr.Hipergeom
BDSuma
Curtosis Distr.Log.Inv
BDVar
BDVarP
D Distr.Log.Norm

Binom.Crit DB Distr.Norm
DDB Distr.Norm.Estand
Buscar
Decimal

Elaborado por: Daniel Zegarra Zavaleta Pg. 44


Distr.Norm.Estand Interseccion.Eje Pearson
.Inv Intervalo.Confianz Pendiente
Distr.Norm.Inv a
Percentil
Distr.T Jerarquia
Permutaciones
Distr.T.Inv K.Esimo.Mayor
Pi
E K.Esimo.Menor
Poisson
Elegir L Potencia
EncontrarB Ln Probabilidad
Error.Tipico.XY Log Producto
EsErr Log10 Promedio
EsError M Pronostico
EsLogico Max Prueba.Chi
EsNod MDeterm Prueba.Chi.Inv
EsNoTexto Media.Acotada Prueba.F
EsNumero Media.Armo Prueba.Fisher.Inv
Espacios Media.Geom Prueba.T
EsTexto Mediana Prueba.Z
Estimacion.Lineal Min R
Estimacion.Logari MInversa Radianes
tmica
MMult Rango.Percentil
F Moda Redondea.Impar
Fact
Moneda Redondea.Par
Fisher
Multiplo.Inferior Redondear
Fonetico
Multiplo.Superior Redondear.Mas
Frecuencia
N Redondear.Menos
G NegBinomDist Reemplazar
Gamma.Ln NomPropio ReemplazarB
Grados Normalizacion Repetir
H NPer RTD
Hallar Numero.Romano S
HallarB P SenoH
I Pago SLn
ndice PagoInt Subtotales
Int.Pago.Dir PagoPrin Suma

Elaborado por: Daniel Zegarra Zavaleta Pg. 45


Suma.Cuadrados TanH V
SumaProducto Tasa VA
Sumar.Si Tendencia Var
SumaX2MasY2 Texto VarP
SumaX2MenosY2 Tir Vdb
SumaXMenosY2 TirM VF
Sustituir Transponer VNA
SYD U
T USDollar

Importante: Tenga en cuenta que en Visual Basic, el nombre de la funcin debe


escribirse en su equivalente en ingls.
Nota.- Algunas funciones de hoja de clculo no tienen utilidad en Visual Basic. Por ejemplo, la
funcin Concatenar no se necesita, ya que en Visual Basic puede usar el operador de
concatenacin & para unir varios valores de texto..

b. Como llamar a una funcin de hoja de clculo desde Visual


Basic
Cuando se desee usar una funciones de hoja de calculo en Visual Basic, esta funcin
deber ejecutarse mediante el objeto WorksheetFunction.
El siguiente procedimiento Sub usa la funcin MN para obtener el valor ms pequeo
de un rango de celdas. Primeramente, se declara la variable CUADRO como un objeto
Range, y a continuacin se la asigna como el rango A1:C10. Luego a la variable
MINIMO se le asigna el resultado de aplicar la funcin MN a CUADRO. Finalmente,
el valor de la variable MINIMO es utilizada para obtener un clculo 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 ms simple de obtener el mismo resultado que la macro anterior sera de
la siguiente forma:
Sub OtraFuncion()
Range("A12") = Application.WorksheetFunction.Min(Range("A1:C10"))*100
End Sub

Si usa una funcin de hoja de clculo que requiere como argumento una referencia de
rango, deber especificar un objeto Range. Por ejemplo, puede usar la funcin de hoja
de clculo BUSCARV para efectuar una bsqueda en un rango de celdas.

Elaborado por: Daniel Zegarra Zavaleta Pg. 46


En una celda de hoja de clculo, podra insertar una frmula 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 funcin VLOOKUP (que es el nombre en ingls de la funcin
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 funcin de
Visual Basic puede tener el mismo nombre que una funcin de Microsoft Excel y, sin embargo,
dar otros resultados. Por ejemplo, Application.WorksheetFunction.Log, y la funcin
Log dan resultados diferentes.

c. Insertar una funcin de hoja de clculo en una celda


En cambio, si lo que se quiere es que la macro escriba un funcin de hoja de clculo en
una celda, entonces habr que especifique la funcin 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 funcin ALEATORIO es RAND

SUMA es SUM

PROMEDIO es AVG

CONTAR es COUNT

d. La Funcin InputBox

Muestra un mensaje en un cuadro de dilogo, espera que el usuario escriba un texto o


haga clic en un botn y devuelve el dato escrito

Elaborado por: Daniel Zegarra Zavaleta Pg. 47


Si el usuario hace clic en Aceptar o presiona Enter , la funcin 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 funcin devuelve una cadena de caracteres de longitud cero
("").

Sintaxis
InputBox (Mensaje , titulo, defecto, xpos, ypos, ayuda, contexto)

Donde:
Mensaje Obligatorio. Texto que se muestra como mensaje en el cuadro de
dilogo. Si mensaje consta de ms de una lnea, puede separarlos
utilizando un carcter de retorno de carro Chr(13), un carcter de
avance de lnea Chr(10) o una combinacin de los caracteres de retorno
de carro-avance de lnea Chr(13) y Chr(10) entre cada lnea y la
siguiente.
titulo Opcional. Texto que se muestra en la barra de ttulo del cuadro de
dilogo. Si omite titulo, en la barra de ttulo se coloca el nombre de la
aplicacin Excel
defecto 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 vaco.
xpos Opcional. Numero que especifica, en pixels, la distancia en sentido
horizontal entre el borde izquierdo del cuadro de dilogo y el borde
izquierdo de la pantalla. Si se omite xpos, el cuadro de dilogo se centra
horizontalmente.
ypos Opcional. Expresin numrica que especifica, en pixels, la distancia en
sentido vertical entre el borde superior del cuadro de dilogo y el borde
superior de la pantalla. Si se omite ypos, el cuadro de dilogo se coloca
a aproximadamente un tercio de la altura de la pantalla.
ayuda Opcional. Texto que identifica el archivo de Ayuda que se utilizar para
proporcionar ayuda interactiva para el cuadro de dilogo. Si se
especifica ayuda, tambin deber especificarse contexto.
contexto Opcional. Expresin numrica que es el nmero de contexto de Ayuda
asignado por el autor al tema de Ayuda correspondiente. Si se
especifica contexto, tambin deber especificarse ayuda.

Nota.- Si desea especificar ms que el primer argumento con nombre, debe utilizar InputBox en una
expresin. Si desea omitir algunos argumentos de posicin, debe incluir los delimitadores de
coma correspondiente.
Inputbox("Ingrese nombre:", ,"Desconocido")

e. El Mtodo InputBox

Muestra un cuadro de dilogo para que el usuario introduzca informacin. Devuelve la


informacin introducida en el cuadro de dilogo.

Elaborado por: Daniel Zegarra Zavaleta Pg. 48


Sintaxis:
expresin.InputBox (Mensaje, titulo, defecto, xpos, ypos, ayuda, contexto, tipo)
Donde:
expresin Expresin obligatoria que asigna un objeto Application.
Mensaje Dato obligatorio que se mostrar en el cuadro de dilogo. Puede ser
un texto, un nmero, una fecha o un valor Boolean (Excel convierte el
dato en texto antes de que muestre).
Title Opcional. Titulo del cuadro de entrada. Si este argumento se omite, el
ttulo predeterminado ser "Entrada".
Defecto Opcional. Especifica un valor que aparecer en el cuadro de texto
cuando se muestre inicialmente el cuadro de dilogo. Si este argumento
se omite, el cuadro de texto permanecer vaco. Este valor puede ser un
objeto Range.
xpos Opcional. Especifica la posicin X del cuadro de dilogo con respecto
a la esquina superior izquierda de la pantalla, en puntos.
ypos Opcional. Especifica la posicin Y del cuadro de dilogo con respecto
a la esquina superior izquierda de la pantalla, en puntos.
Ayuda Opcional. El nombre del archivo de Ayuda para este cuadro de
entrada.
Contexto Opcional. La identificacin de contexto del tema de Ayuda.
Tipo Opcional. Especifica el tipo de datos que se devuelve. Si este
argumento se omite, el cuadro de dilogo devolver texto. Puede ser
uno de los siguientes valores o bien una suma de ellos.

Valor Significado
0 Una frmula
1 Un nmero
2 Texto (una cadena)
4 Un valor lgico (True o False)
8 Una referencia a una celda, como un objeto Range.
16 Un valor de error, como por ejemplo #N/A
64 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 nmeros, establezca Tipo como 1 + 2.
Use InputBox para mostrar un cuadro de dilogo sencillo que permite introducir
informacin para usarla en una macro. El cuadro de dilogo tiene un botn Aceptar y
un botn Cancelar. Si elige el botn Aceptar, InputBox devolver el valor introducido
en el cuadro de dilogo. Si elige el botn Cancelar, InputBox devolver False.
Si Type es 0, InputBox devolver la frmula en forma de texto, por ejemplo,
"=2*PI()/360". Si existen referencias en la frmula, se devolvern 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 Pg. 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.

Conclusin:
El mtodo InputBox difiere de la funcin InputBox en que el primero permite la
validacin selectiva de las entradas del usuario y en que puede usarse con objetos,
valores de error y frmulas de Excel. Tenga en cuenta que Application.InputBox llama
al mtodo 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
funcin InputBox, y el dato escrito ser considerado siempre como del tipo texto.

Ejemplos
En este ejemplo se solicita un nmero 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 Pg. 50


Ejercicio N 7 - Pago de un prstamo hipotecario

En este ejemplo se usa la funcin de hoja de clculo PAGO para calcular el pago
mensual de un prstamo hipotecario.

1ra Solucin:
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
funcin PAGO siguiente:

=PAGO(B3/1200,B4,-B5)

Inters Monto del


prstamo

Nmero de pagos

3.- Guarde el archivo con el nombre Pago de Hipoteca.


2da Solucin:
Ahora, el mismo caso anterior se va ha resolver pero utilizando ntegramente un
procedimiento Sub. Es decir no se necesitarn en absoluto datos de ninguna celda.
1.- Ingresar al Editor de Visual Basic con Alt+F11 y luego inserte una hoja de mdulo
con el men Insertar/Modulo.
2.- En la hoja de mdulo escriba las siguientes instrucciones:

Sub PagoMensual()
Interes = Val(InputBox("Ingrese el Inters:"))
Periodos = Val(InputBox("Ingrese los Periodos:"))
Prestamo = Val(InputBox("Ingrese el Prstamo:"))
Pago = Application.WorksheetFunction.Pmt(Interes/1200, _
Periodos,-Prestamo)
MsgBox ("El Pago mensual es de: " & Format(Pago, "Currency"))
End Sub

Como la funcin Inputbox devuelve datos tipo texto al escribir el Inters, los
Perodos o el Prstamo, entonces, se le antepone la funcin Val para convertir esos
datos en nmeros, y as poder operarlos matemticamente con la funcin Pago (que
en ingles su equivalente es Pmt)
3.- Con Autoformas/Formas bsicas/Bisel dibuje un botn en la hoja de calculo y
asgnele la macro PagoMensual.

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 botn
Aceptar:

4.- Guarde nuevamente el archivo con Ctrl+G.


En conclusin, 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 clculo.
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 clculo.
Habrn 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
clculos existentes en las celdas, y tambin los datos y clculos provenientes de las
instrucciones de Visual Basic.
3ra Solucin:
Una tercera forma de ingresar los datos para el calculo del pago de la hipoteca es
haciendo uso del Mtodo Inputbox, en vez de la Funcin Inputbox.
1.- Ingresar al Editor de Visual Basic con Alt+F11 y en la hoja de mdulo escriba las
siguientes instrucciones:

Elaborado por: Daniel Zegarra Zavaleta Pg. 52


Sub OtroPago()
Interes = Application.InputBox("Seleccione el Inters:")
Periodos = Application.InputBox("Seleccione los Periodos:")
Prestamo = Application.InputBox("Seleccione el Prstamo:")
Pago = Application.WorksheetFunction.Pmt(Interes / 1200, _
Periodos, -Prestamo)
MsgBox ("El Pago mensual es de: " & Format(Pago, "Currency"))
End Sub

En este caso el mtodo Inters = Application.Inputbox trata al dato que uno escribe,
directamente como del tipo numrico, ya no como texto. Por esta razn ya no es
necesario usar la funcin Val.
2.- Luego asigne esta macro al mismo botn de autoformas del caso anterior.
Cuando la macro se ejecute y aparezcan las ventanas para introducir datos, se podrn
escribir los datos o sino tambin se podr seleccionar con el mouse las celdas que
contienen los datos que se solicitan y hacer luego clic en el botn Aceptar:

Elaborado por: Daniel Zegarra Zavaleta Pg. 53


9. Funciones propias de Visual Basic
a. Lista breve de las funciones ms comunes

Val Convierte los nmeros contenidos en una cadena como un valor numrico del tipo
adecuado.

Por ejemplo, Val("15 aos"), da como respuesta el nmero: 15

Str Convierte en un tipo texto (String) la representacin de cadena de un nmero.

Por ejemplo, Str(15) & "aos", da como respuesta el texto: 15 aos

Left Extrae un nmero especificado de caracteres del lado izquierdo de una cadena.

Por ejemplo, Left("Limatambo",4), da como respuesta el texto: Lima.

Right Extrae un nmero 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 fraccin de un nmero y devuelven el valor
entero resultante. La diferencia entre Int y Fix es que si el nmero es negativo, Int
devuelve el primer entero negativo menor o igual a nmero, mientras que Fix
devuelve el primer entero negativo mayor o igual a nmero.

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 nmero o expresin de clculo

Por ejemplo, Abs(3-7) da como respuesta: 4

Sgn Devuelve el nmero 1,0, -1 que indica el signo de un nmero.

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 nmero: 9

Round Redondea un nmero a una cantidad especificada de lugares decimales.

Elaborado por: Daniel Zegarra Zavaleta Pg. 54


Por ejemplo, Round(3.1415927,4) da como respuesta el nmero: 3.1416

Date Obtiene la fecha actual del sistema.

Por ejemplo, si hoy fuera el da de la primavera, Date dara como respuesta:


23/09/2009

Timer Obtiene el nmero de segundos transcurridos desde la medianoche.

Hour Obtiene un nmero entero entre 0 y 23, inclusive, que representa la hora del
argumento de la funcin.

Por ejemplo, Hour(3:15:27) da como respuesta: 3

Now Obtiene un nmero que especifica la fecha y hora actuales de acuerdo con la
configuracin 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 nmero entero entre 1 y 31, inclusive, que representa el da del mes.

Por ejemplo, Day(Now) da como respuesta: 23

Minute Obtiene un nmero 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 nmero 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 nmero entero que representa el ao actual del sistema.

Por ejemplo, Year(Now) da como respuesta: 2009

Format formatea un dato de acuerdo a las instrucciones contenidas en una expresin 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 Pg. 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), tambin conocidas como estructuras de
control, es posible escribir cdigo de Visual Basic que tome decisiones y repita
determinadas acciones. Otra estructura de control til es la instruccin 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 ejecucin mltiple sobre un mismo objeto

g. Que hacen las Instrucciones Condicionales

If...Then...Else: Salta a una u otra instruccin cuando una condicin es


verdadera o Falsa

Select Case: Selecciona la instruccin a ejecutar en funcin 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 condicin es Falsa, otros las
repiten hasta que la condicin sea Verdadera. Hay tambin bucles que repiten un
conjunto de instrucciones un nmero determinado de veces o una vez para cada objeto
de una coleccin.

Do...Loop: Sigue en el bucle mientras o hasta que una cierta condicin


sea verdadera.

For...Next: Utiliza un contador para ejecutar un grupo de iinstrucciones


un nmero determinado de veces.

For Each...Next: Repite un grupo de instrucciones para cada uno de los objetos
de una coleccin.

i. Que hacen las Instrucciones de ejecucin mltiple


Normalmente, en Visual Basic, debe especificarse un objeto antes de poder ejecutar
uno de sus mtodos o cambiar una de sus propiedades. Se puede usar la instruccin
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 Pg. 56


11. La Instruccin If...Then...Else

Ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una


expresin.
Sintaxis
If condicin Then instrucciones Else instrucciones_else

Puede utilizar la siguiente sintaxis en formato de bloque:


If condicin Then
Instrucciones
ElseIf condicin-n Then
instrucciones_elseif...
Else
instrucciones_else
End If

Donde:
condicin Requerido. Uno o ms de los siguientes dos tipos de
expresiones:
Una expresin numrica o expresin de cadena que puede ser
evaluada como Verdadera o Falsa. Si condicin es Null,
condicin se considera Falsa.
instrucciones Opcional en formato de bloque; se requiere en formato de lnea
sencilla que no tenga una clusula Else. Una o ms instrucciones
separadas por dos puntos ejecutados si la condicin es
Verdadera.
condicin-n Opcional. Igual que condicin.
instrucciones_elseif Opcional. Una o ms instrucciones ejecutadas si la condicin-n
asociada es Verdadera.
instrucciones_else Opcional. Una o ms instrucciones ejecutadas si ninguna de las
expresiones anteriores condicin o condicin-n es Verdadera.

Puede utilizar la forma de una sola lnea (Sintaxis 1) para pruebas cortas y sencillas.
Sin embargo, el formato de bloque (Sintaxis 2) proporciona ms estructura y
flexibilidad que la forma de lnea simple y, generalmente, es ms fcil de leer, de
mantener y de depurar.

Elaborado por: Daniel Zegarra Zavaleta Pg. 57


Nota.- Con la sintaxis1 es posible ejecutar mltiples instrucciones como resultado de una decisin
If...Then, pero todas deben estar en la misma lnea y separadas por dos puntos, como en la
instruccin siguiente:
If N > 1 Then A = N * 2 : B = B + N : C = C - N

Una instruccin con formato de bloque If debe ser la primera de la lnea. Las partes
Else, ElseIf y End If, de la instruccin, solamente pueden ir precedidas de un nmero
de lnea o una etiqueta de lnea. El bloque If debe terminar con una instruccin End If.
Para determinar si una instruccin If es un bloque, examine lo que sigue a la palabra
clave Then. Si lo que aparece detrs de Then en la misma lnea no es un comentario, la
instruccin se considera como una instruccin If de una sola lnea.
Las clusulas Else y ElseIf son opcionales. Puede tener en un bloque ElseIf, tantas
clusulas If como desee, pero ninguna puede aparecer despus de una clusula 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 condicin. Si condicin es
Verdadera, se ejecutan las instrucciones que estn a continuacin de Then. Si
condicin es False, se evalan una a una las condiciones ElseIf (si existen). Cuando se
encuentra una condicin Verdadera se ejecutan las instrucciones que siguen
inmediatamente a la instruccin Then asociada. Si ninguna de las condiciones ElseIf es
Verdadera (o si no hay clusulas ElseIf), se ejecutan las instrucciones que siguen a
Else. Despus de la ejecucin de las instrucciones que siguen a Then o Else, la
ejecucin contina con la instruccin que sigue a End If.

a. Como usar las instrucciones If...Then...Else

Se puede usar la instruccin If...Then...Else para ejecutar una instruccin o bloque de


instrucciones determinadas, dependiendo del valor de una condicin.

b. Ejecutar una sola instruccin cuando la condicin es


Verdadera
Para ejecutar una sola instruccin cuando una condicin es Verdadera, se puede usar la
sintaxis de lnea nica de la instruccin If...Then...Else.
El siguiente ejemplo muestra la sintaxis de lnea nica, en la que se omite el uso de la
palabra clave Else: (Nota: las fechas se escriben entre numerales #)

Sub Cumpleaos()
MiCumple = #23/8/2009#
If MiCumple > Now Then msgbox "An falta para mi cumpleaos"
End Sub

Para ejecutar ms de una lnea de cdigo, es preciso utilizar la sintaxis de mltiples


lneas. Esta sintaxis incluye la instruccin End If, tal y como muestra el siguiente
ejemplo:

Elaborado por: Daniel Zegarra Zavaleta Pg. 58


Sub HombreMujer() Letra Roja, Negrita y
If Range("Sexo") = "F" Then Cursiva
Range("Sexo").Font.ColorIndex = 3
Range("Sexo").Font.Bold = True
Range("Sexo").Font.Italic = True
End If
End Sub

c. Ejecutar unas instrucciones si la condicin es Verdadera y


ejecutar otras si es Falsa
Use una instruccin If...Then...Else para definir dos bloques de instrucciones
ejecutables: un bloque que se ejecutar cuando la condicin es Verdadera y el otro que
se ejecutar si la condicin es Falsa.
Sub HombreMujer() Letra Roja, Negrita y
If Range("Sexo") = "F" Then Cursiva
Range("Sexo").Font.ColorIndex = 3
Range("Sexo").Font.Bold = True
Range("Sexo").Font.Italic = True
Else Letra Azul, sin
Range("Sexo").Font.ColorIndex = 5 Negrita ni Cursiva
Range("Sexo").Font.Bold = False
Range("Sexo").Font.Italic = False
End If
End Sub

d. Comprobar una segunda condicin si la primera condicin es


Falsa
Se pueden aadir instrucciones ElseIf a una instruccin If...Then...Else para comprobar
una segunda condicin si la primera es Falsa. Por ejemplo, el siguiente procedimiento
funcin calcula una bonificacin salarial dependiendo de la clasificacin del
trabajador. La instruccin que sigue a la instruccin Else slo 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 ms legible el cdigo quizs sea aconsejable

Elaborado por: Daniel Zegarra Zavaleta Pg. 59


utilizar una instruccin Select Case en vez de recurrir a mltiples niveles de
instrucciones If...Then...Else anidadas.

12. La Instruccin While...Wend

Ejecuta una serie de instrucciones mientras una condicin dada sea True.
Sintaxis
While condicin
intrucciones
Wend
Donde:
condicin Requerido. Expresin numrica o expresin de cadena cuyo
valor es Verdadero o Falso. Si condicin es Null, condicin se
considera Falso.
instrucciones Opcional. Una o ms instrucciones que se ejecutan mientras la
condicin es Verdadera.

Si condicin es Verdadera, todas las instrucciones se ejecutan hasta que se encuentra la


instruccin Wend. Despus, el control vuelve a la instruccin While y se comprueba
de nuevo la condicin. Si la condicin es an Verdadera, se repite el proceso. Si no es
Verdadera, la ejecucin se reanuda con la instruccin que sigue a la instruccin Wend.
Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con
el While ms reciente.
Nota.- A diferencia de While...Wend, la instruccin Do...Loop proporciona una manera ms
flexible y estructurada de realizar los bucles.

La siguiente macro busca a partir de la celda B3 hacia abajo una celda que se
encuentre vaca.
Sub BuscaBlanco()
Range("B3").select
While ActiveCell <> Empty
ActiveCell.Offset(1,0).Activate
Wend
End Sub

13. La Instruccin For...Next

Repite un grupo de instrucciones un nmero especifico de veces.


Sintaxis
For contador = principio To fin Step incremento

Elaborado por: Daniel Zegarra Zavaleta Pg. 60


instrucciones
Exit For
instrucciones
Next contador
Donde:

contador Requerido. Variable numrica que se utiliza como contador de


bucle. La variable no puede ser Booleana (Verdadero o Falso) ni
un elemento de matriz.
principio Requerido. Valor inicial del contador.
fin Requerido. Valor final del contador.
incremento 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.
instrucciones Opcional. Una o ms instrucciones entre For y Next que se
ejecutan un nmero 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
continuacin:

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 ejecucin contina con la instruccin que
sigue a la instruccin Next.
Sugerencia Cambiar el valor de contador mientras est dentro de un bucle hace difcil
su lectura y depuracin.
Se pueden colocar en el bucle cualquier nmero de instrucciones Exit For como una
manera alternativa de salir del mismo. La instruccin Exit For, que se utiliza a menudo
en la evaluacin de alguna condicin (por ejemplo, If...Then), transfiere el control a la
instruccin que sigue inmediatamente a la instruccin 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 construccin es correcta:
For Pais = 1 To 5

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 instruccin Next, la ejecucin contina como si este se
hubiera incluido. En cambio si se produce un error si se encuentra una instruccin Next antes
de su instruccin For correspondiente.

a. Como usar las instrucciones For...Next


Las instrucciones For...Next se pueden utilizar para repetir un bloque de instrucciones
un nmero 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
instruccin For determina la variable contador x y sus valores inicial y final. La
instruccin 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 ejecucin 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 ejecucin 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 Pg. 62


Nota.- En realidad no es necesario incluir el nombre de la variable contador despus de la
instruccin Next. En los ejemplos anteriores, el nombre de la variable contador se ha incluido
solo para facilitar la lectura del cdigo y poder identificar as donde empieza el bucle For y
donde termina. Esto de usar nombre del contador despus de la instruccin Next es de mayor
utilidad cuando existen varias instrucciones ForNext anidadas.

Se puede abandonar una instruccin For...Next antes de que el contador alcance su


valor final, para ello se utiliza la instruccin Exit For. Por ejemplo, si se produce un
error se puede usar la instruccin Exit For en el bloque de instrucciones Verdadero de
una instruccin If...Then...Else o Select Case que detecte especficamente ese error. Si
el error no se produce, la instruccin IfThenElse es False y el bucle continuar
ejecutndose normalmente.

14. La Instruccin Select Case

Ejecuta uno de varios grupos de instrucciones, dependiendo del valor de una expresin.
Sintaxis
Select Case expresin_prueba
Case lista_expresion-n
instrucciones-n...
Case Else
instrucciones_else
End Select

Donde:
expresin_prueba Requerido. Es cualquier expresin numrica o expresin de
cadena.
lista_expresin-n Requerido si aparece la palabra clave Case. Lista delimitada por
comas de una o ms de las formas siguientes:
expresin,
expresin To expresin,
Is operador_de_comparacin expresin.
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 comparacin para
especificar un intervalo de valores. Si no se escribe, la palabra
clave Is se insertar automticamente.
instrucciones-n Opcional. Una o ms instrucciones ejecutadas si
expresin_prueba coincide con cualquier parte de
lista_expresin-n.

Elaborado por: Daniel Zegarra Zavaleta Pg. 63


instrucciones_else Opcional. Una o ms instrucciones que se ejecuten si
expresin_prueba no coincide con ninguna de las clusulas
Case.

Si expresin_prueba coincide con cualquier lista_expresin asociada con una clusula


Case, las instrucciones que siguen a esa clusula Case se ejecutan hasta la siguiente
clusula Case o, para la ltima clusula, hasta la instruccin End Select. El control
pasa despus a la instruccin que sigue a End Select. Si expresin_prueba coincide con
una expresin de lista_expresin en ms de una clusula Case, slo se ejecutan las
instrucciones que siguen a la primera coincidencia.
La clusula Case Else se utiliza para indicar las instrucciones que se van a ejecutar si
no se encuentran coincidencias entre expresin_prueba y una lista_expresin en
cualquiera de las otras selecciones de Case. Aunque no es necesario, es buena idea
tener una instruccin Case Else en el bloque Select Case para controlar valores
imprevistos de expresin_prueba. Cuando no hay una instruccin Case Else y ninguna
expresin de la lista en las clusulas Case coincide con la expresin de prueba, la
ejecucin contina en la instruccin que sigue a End Select.
Se pueden utilizar expresiones mltiples o intervalos en cada clusula Case. Por
ejemplo, la lnea siguiente es vlida:

Case 1 To 4, 7 To 9, 11, 17, Is > Grande

Nota.- El operador de comparacin Is no es lo mismo que la palabra clave Is utilizada en la


instruccin Select Case.

Tambin puede especificar intervalos y expresiones mltiples para cadenas de


caracteres. En el siguiente ejemplo, Case coincide con las cadenas que son
exactamente carnes, cadenas que estn entre nueces y sopa en orden alfabtico y el
valor actual de la variable Fruta

Case "carnes", "nueces" To "sopa", Fruta

Las instrucciones Select Case se pueden anidar. Cada instruccin Select Case debe
tener su correspondiente instruccin End Select.

a. Como usar la instruccion Select Case


La instruccin Select Case se utiliza como alternativa a las instrucciones ElseIf en
instrucciones If...Then...Else cuando se compara una expresin con varios valores
diferentes. Mientras que las instrucciones If...Then...Else pueden comparar una

Elaborado por: Daniel Zegarra Zavaleta Pg. 64


expresin distinta para cada instruccin ElseIf, la instruccin Select Case compara
nicamente la expresin que evala al comienzo de la estructura de control.
En el siguiente ejemplo, la instruccin Select Case evala el argumento rendimiento
que se pasa al procedimiento. Observe que cada instruccin Case puede contener ms
de un valor, una gama de valores, o una combinacin de valores y operadores de
comparacin. La instruccin opcional Case Else se ejecuta si la instruccin 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 * 0.20
Case Is <2000
Aumento = Sueldo * 0.15
Case Is <3000
Aumento = Sueldo * 0.10
Case 3000 To 4000
Aumento = Sueldo * 0.05
Case Else
Aumento = 0
End Select
Range("C5") = Aumento
End Sub

15. La Instruccin Do...Loop

Repite un bloque de instrucciones cuando una condicin es Verdadera o hasta que una
condicin se convierta en Falsa.
Sintaxis
Do While | Until condicin
instrucciones
Exit Do
instrucciones
Loop
O bien, puede utilizar esta sintaxis:
Do
instrucciones
Exit Do
instrucciones
Loop While | Until condicin

Donde:

Elaborado por: Daniel Zegarra Zavaleta Pg. 65


condicin Opcional. Expresin numrica o expresin de cadena que es
Verdadera o Falsa. Si la condicin es Null, la condicin se
considera Falsa.
Instrucciones Una o ms instrucciones que se repiten mientras (While) o hasta
que (Until) la condicin sea Verdadera.

Se puede utilizar cualquier nmero de instrucciones Exit Do ubicadas en cualquier


lugar dentro de una estructura de control DoLoop, para proporcionar una salida
alternativa de un DoLoop. La instruccin Exit Do se utiliza frecuentemente en la
evaluacin de alguna condicin, por ejemplo, IfThen; en este caso, la instruccin
Exit Do transfiere el control a la instruccin que sigue inmediatamente a la instruccin
Loop.
Cuando se utiliza con instrucciones anidadas DoLoop, la instruccin 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
nmero indefinido de veces. Las instrucciones se repiten mientras (While) una
condicin sea Verdadera o hasta (Until) que llegue a ser Verdadera.

b. Repetir instrucciones mientras una condicin es Verdadera


Hay dos formas de utilizar la palabra clave While (Mientras) para comprobar el estado
de una condicin en una instruccin Do...Loop. Se puede comprobar la condicin antes
de entrar en el bucle, o despus de que el bucle se haya ejecutado al menos una vez.
En el siguiente procedimiento WhileInicial, la condicin 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 ejecutarn nunca. En el
procedimiento WhileFinal, las instrucciones contenidas en el bucle al menos se
ejecutarn una vez y aumentarn la Nota en 1, antes de comprobarse que la condicin
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 Pg. 66


MsgBox "El bucle se ha repetido " & Contador & " veces."
End Sub

c. Para repetir instrucciones hasta que una condicin llegue a


ser Verdadera
Hay dos formas de utilizar la palabra clave Until (Hasta que) para comprobar el estado
de una condicin en una instruccin Do...Loop. Se puede comprobar la condicin antes
de entrar en el bucle (como muestra el procedimiento UntilInicial) o se pueden
comprobar despus de que el bucle se haya ejecutado al menos una vez (como muestra
el procedimiento UntilFinal). El bucle seguir ejecutndose mientras la condicin 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 instruccin Exit Do. Por ejemplo, para salir de
un bucle sin fin, se puede usar la instruccin Exit Do en el bloque de instrucciones
True de una instruccin If...Then...Else o Select Case. Si la condicin es False, el bucle
seguir ejecutndose 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 instruccin If...Then...Else
comprueba esa condicin 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 Pg. 67


Nota.- Para detener manualmente la ejecucin de un bucle sin fin que se repite sin control, presione
la tecla Esc o la combinacin de teclas Ctrl+Pausa.

16. La instruccin For Each...Next

Repite un grupo de instrucciones para cada elemento de una matriz o coleccin.


Sintaxis
For Each elemento In grupo
instrucciones
Exit For
instrucciones
Next elemento

Donde:
elemento 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
genrica o cualquier variable de objeto especfica.
grupo Requerido. Nombre de un conjunto de objetos o de una matriz .
instrucciones Opcional. Una o ms 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. Despus, mientras haya ms elementos en grupo, las
instrucciones en el bucle continan ejecutndose para cada elemento. Cuando no hay
ms elementos en el grupo, se sale del bucle y la ejecucin contina con la instruccin
que sigue a la instruccin Next.
Se pueden colocar en el bucle cualquier nmero de instrucciones Exit For. La
instruccin Exit For se utiliza a menudo en la evaluacin de alguna condicin (por
ejemplo, If...Then) y transfiere el control a la instruccin que sigue inmediatamente a
la instruccin 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 instruccin Next, la ejecucin contina como si se
hubiera incluido. En cambio si se encuentra una instruccin Next antes de su instruccin For
correspondiente, se producir un error.

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 coleccin o para cada elemento de una matriz. Visual Basic asigna
valor automticamente 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 cdigo siguiente recorre todas las celdas de un rango, asignado a la variable Cuadro
con la instruccin 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 Pg. 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 continuacin 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 clculo 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 instruccin Exit For.
El siguiente ejemplo detecta la primera celda del rango C3:C30 que no contiene un
nmero. 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 Pg. 70


Sub EncuentraTexto()
For Each Celda In Range("C3:C30")
If Not IsNumeric(Celda) Then
Celda.Select
MsgBox "El objeto contiene un valor no numrico."
Exit For
End If
Next
End Sub

17. La instruccin 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 ms instrucciones que se van a ejecutar sobre
el objeto.

La instruccin With permite realizar una serie de instrucciones sobre un objeto


especificado sin volver a calificar el nombre del objeto. Por ejemplo, para cambiar un
nmero de propiedades diferentes en un nico objeto, es ms conveniente colocar las
instrucciones de asignacin de las propiedades en la estructura de control With,
haciendo referencia al objeto una vez, en lugar de hacerlo con cada asignacin de
propiedad.

a. Como usar las instrucciones With


La instruccin With permite especificar una vez un objeto o tipo definido por el
usuario en una serie entera de instrucciones. Las instrucciones With aceleran la
ejecucin 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 nmero 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
Tamao de fuente 20 puntos

Elaborado por: Daniel Zegarra Zavaleta Pg. 71


Color de fuente Roja
Centrado en la celda
Podramos 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


instruccin 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 instruccin 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 raz cuadrada de
200 y selecciona a continuacin 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 Pg. 72


archivo Pagos.xls. De no hacerse as la macro supondra 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 Pg. 73


18. Creacin de formularios userforms

a. Para crear un formulario


Al igual como se inserta una hoja de mdulo 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 Ttulo del


formulario

2. En la ventana Propiedades, escribir en la propiedad (Name): Alumnos, y en la


propiedad Caption escriba: Ficha del Alumno.

b. Para disear un formulario


Una vez creado el formulario lo siguiente es disear los elementos dentro del
formulario. Para ello es necesario habilitar el cuadro de herramientas, para lo cual
deber hacer clic en el botn

Elaborado por: Daniel Zegarra Zavaleta Pg. 74


El cuadro de herramientas contiene una serie de controles de, cada uno de los cuales
cumplen una funcin especial una vez que se insertan dentro del formulario.

Controles para formularios del cuadro de herramientas:

Seleccionar Cuadro de texto B.de opcin Pgina Imagen


objetos mltiple
Cuadro de lista B.de alternar Botn de
Barra de nmero
Etiqueta Cuadro combinado Marco tabulaciones
Barra de
Cuadro de texto B.de comando desplazamiento

Como agregar un control al formulario


Utilice cualquiera de los siguientes mtodos para agregar un control del Cuadro de
herramientas al formulario.
Haga clic en un control en el Cuadro de herramientas y despus haga clic en el
formulario. El control aparecer en su tamao predeterminado. Luego puede
arrastrar el control para cambiar su tamao.
Arrastre un control del Cuadro de herramientas al formulario. El control
aparecer en su tamao predeterminado.
Haga doble clic en el control del Cuadro de herramientas y despus 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 despus 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 Pg. 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 Frmulas/Crear desde la seleccin,
marque solo la casilla Fila superior, y Aceptar.
4. Con la Ficha Insertar/Formas/Rectngulo, dibuje el botn Abrir Ficha.
5. Al rango A3:F6 dele el nombre LISTA.
6. Ingrese al Editor de Visual Basic, e inserte una hoja de Mdulo (men
Insertar/Mdulo), y un Formulario (men Insertar/UserForm).
7. En la hoja de Mdulo escriba la siguiente subrutina:
Sub FichaAlumno()
Alumnos.Show
End Sub

8. En la ventana de formulario disee 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 Pg. 76


Cuadro combinado:
(Name) : Codigo
RowSource : Codigo
Tab index :1
Cuadro de texto1:
(Name) : Nombre
Tab index :2
Cuadro de texto2:
(Name) : Apellidos
Tab index :3
Cuadro de texto3:
(Name) : Edad
Tab index :4
Cuadro de texto4:
(Name) : Telefono
Tab index :5
Botn de opcin1:
(Name) : Masculino
Botn de opcin2:
(Name) : Femenino
Image1:
(Name) : Foto
PictureSizeMode : 1 - fmPictureSizeModeStretch
CommandButton1:
(Name) : Registrar
CommandButton2:
(Name) : Cerrar
CommandButton3:
(Name) : Nuevo
Luego, haciendo doble clic sobre los siguientes controles escriba para ellos el siguiente cdigo:
Para el botn Cerrar:
Private Sub Cerrar_Click()
Unload Me
End Sub

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 botn 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 botn 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 Pg. 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 botn Abrir
Ficha.
12. Finalmente guarde el archivo como un libro habilitado para macros y pngale el
nombre Registro de alumnos.
13. En la misma carpeta donde guarde el anterior archivo de Excel, deber guardar
tambin los archivos con formato jpg que contengan las fotos de los alumnos, los
cuales debern tener nombres como: A001.jpg, A002.jpg, etc.

Elaborado por: Daniel Zegarra Zavaleta Pg. 79


Prctica De Laboratorio N1

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.
Asignacin 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 clculo 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 Pg. 80


1ra Parte: Creacin el Cuadro de Viajes y la Tabla de Tarifas

1. En la Hoja1 crear el Cuadro de Viajes, tal y como se muestra a continuacin 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 seleccin, 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 Pg. 81


Elegir la Ficha Formulas/Crear desde la seleccin, verificar que solo est marcada la
casilla Fila superior, y luego Aceptar
5. En la celda H5 escribir la siguiente frmula matricial:
{=SUMA(SI((Chofer=G5)*(Dia>=H$2)*(Dia<H$2+1),Precio))}
Luego copiar esta frmula en el rango H5:H9, y finalmente en H10 escribir la
formula: =SUMA(H5:H9).

2da Parte: 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 frmula: =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 Pg. 82


Presionar Ctrl+*
Ficha Formulas/Crear desde la seleccin, marcar solo Fila superior, y Aceptar
Seleccionar la celda B6, y luego presionar Ctrl+
Finalmente presionar la tecla una vez

10. Finalizar la grabacin de la macro con un clic en el boton Detener grabacin.


11. La Hoja1 se ver entonces as:

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
cdigo 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 Pg. 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, adems agregar la
sentencia Application.DisplayAlerts=False, luego de lo cual la subrutina quedara como
se muestra a continuacin:

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 tamaos de los nombres de rango del
cuadro de viajes.

Elaborado por: Daniel Zegarra Zavaleta Pg. 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. Automticamente 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 pngale el
nombre Taxi. El archivo se gaurdar con el nombre Taxi.xlsm

Elaborado por: Daniel Zegarra Zavaleta Pg. 85


Prctica De Laboratorio N2

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 clculo. Para los cual se van a crear dos
macros:
Una macro que crea cdigos 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 Validacin de datos:


En el casillero Permitir, elegir la opcin Lista.
En el casillero Origen, escribir Personal,Equipo,Materiales
Luego Aceptar.
3. Dibujar tambin los botones rectangulares para las macros Crea Cdigo y Registrar, tal
como se muestra en la figura.
4. En la hoja Personal ingrese lo siguiente:

Elaborado por: Daniel Zegarra Zavaleta Pg. 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 mdulo escriba el siguiente cdigo 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 Pg. 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 Pg. 88


Prctica De Laboratorio N3

Objetivos:
Utilizar las distintas sentencias de control para la solucin de mltiples tareas en el manejo
de datos. Las sentencias de control a utilizarse son las siguientes:
If..then..else,
Select Case
Whilewend,
Fornext,
For eachnext.

1. En la hoja de clculo escribir los siguientes datos:

2. En Visual Basic insertar una hoja de mdulo 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 Pg. 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 Pg. 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 Pg. 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) = "Nio"
Else
ActiveCell.Offset(0, 4) = "Nia"
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 Pg. 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 Pg. 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 Pg. 94


Prctica De Laboratorio N4

Objetivos:
Se desea ingresar datos de diferentes clientes en una lista, utilizando tres mtodos
diferentes:.
Copiando datos del cliente desde un rango de celdas.
Ingresar datos del cliente utilizando ventanas de Inputbox.
Ingresar datos del cliente a travs de formularios

3. En la hoja de clculo escribir los siguientes datos:

4. Luego dibuje tres botones rectangulares tal como se aprecia en la figura.


5. A continuacin ingrese a Visual Basic, inserte una hoja de mdulo 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 Pg. 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 disee en ella el


formulario tal como se muestra a continuacin:

Elaborado por: Daniel Zegarra Zavaleta Pg. 96


7. Seleccione el fondo del formulario, y en la ventana Propiedades pngale en la propiedad
(Name) el nombre Ficha1
8. Tambin pngale nombre a cada cuadro de texto: DNI, Cliente y Telefono,
respectivamente .
9. Igualmente con la propiedad (Name), pngale nombres a los botones de comando:
Registrar, y Cancelar, respectivamente.
10. Luego haga doble clic en el botn Registrar, y escriba el siguiente cdigo:

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 Pg. 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 botn de comando Cancelar, y
all escriba el siguiente cdigo:

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 Pg. 98


Prctica De Laboratorio N5

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
Proteccin de la hoja de calculo con contraseas
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 maana 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 debern cumplirse por ambas partes:
Si trabaja 5 das a la semana sin faltar, hay una bonificacin 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: Creacin del Cuadro de Pago por Vigilancia

20. En una hoja de clculo 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
continuacin en la figura.
21. Combinar y centrar los siguientes rangos de celdas:
D2:C2 Tamao 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,
categora 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 Pg. 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 ttulo 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 ao 2004. Luego
seleccionando ambas celdas, arrastrar el cuadro de
relleno hacia abajo hasta la celda C158 que
correspondera 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 nmeros y nombres de
los doce meses del ao como se muestra en la figura, y luego seleccionando el rango
E3:F14 darle el nombre de rango MESES.

Elaborado por: Daniel Zegarra Zavaleta Pg. 100


32. Regrese a la Hoja Semana y seleccionando el rango B4:C8 llamar al men
Datos/Validacin, 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 validacin 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 H4:H8 ChExtras
C4:D8 Horas C4:C8 Ingreso
D4:D8 Salida
35. Tambin 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 Pg. 101


C12: =CONTAR(C4:C8)

D12: =E9*24*60
E12: =G9*24*B12/4
F12: =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 botn Casilla de verificacin dibuje una casilla y borre
totalmente el texto que lo acompaa.

Elaborado por: Daniel Zegarra Zavaleta Pg. 102


37. En la casilla que acaba de crear haga un clic derecho y elija la opcin 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 ms otras celdas de la columna F y con la opcin Formato
de control cambie las celdas de vinculacin 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
verificacin de las celdas F4, F5, F6, F7, F8, G7 y G8. tal y como se muestra en la figura
ms adelante.
A continuacin vamos a dar formato condicional a las celdas que tienen las horas para que
cambien de color automticamente de la siguiente forma:
las horas de llegada si son ms de las 8:00 am debern 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 tambin se pintar de fondo rojo y letras blancas.
Las horas extras previamente autorizadas con un check en la columna H se pintarn de
fondo color Oro.
40. Seleccionar el rango C4:C8 y llamando al men Formato/Formato condicional elija lo
siguiente:
En el botn 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 botn de Formato elija.- Fuente: Negrita; Bordes: Contorno; Tramas: Color Oro.

Elaborado por: Daniel Zegarra Zavaleta Pg. 103


42. Seleccionar ahora el rango F4:F8 y dele este otro formato condicional:
En el botn 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 botn de Formato elija.- Fuente: Negrita; Bordes: Contorno; Tramas: Color Oro.

44. A continuacin guarde el archivo con el nombre Vigilancia.


45. El cuadro de vigilancia deber verse entonces como se muestra a continuacin:

Elaborado por: Daniel Zegarra Zavaleta Pg. 104


2da Parte: Creacin de macros para automatizar el Cuadro

46. Con el botn que se encuentra en las herramientas de Formulario, dibujar los siguientes
botones: Ingreso, Falta, Salida y Borrar Todo, como los que se muestran a
continuacin:

47. Adems hacia el dalo superior derecho del cuadro dibujar con Autoformas/Formas
bsicas/Seal de prohibido, el crculo con diagonal que se muestra en la figura anterior y
luego pntela con la herramienta de color de relleno, de color Rojo. Adems haga un clic
derecho en este botn y elija Formato de autoforma, luego en la ficha Proteger
desactive la casilla Bloqueada.

Elaborado por: Daniel Zegarra Zavaleta Pg. 105


48. Luego ingrese al Editor de Visual Basic con Alt+F11 y escriba en la hoja de Mdulo 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 Pg. 106


Range("ChExtras").ClearContents
Sale:
End Sub

Sub QuitarSeguro()
ActiveSheet.Unprotect
ActiveSheet.Shapes("LLAVE").Select
Selection.OnAction = "PoneSeguro"
Range("a1").Select
MsgBox "Proteccin 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, asgnele su respectiva macro.
50. A la autoforma seal de prohibido (circulo con diagonal rojo) asgnele la macro
PonerSeguro.
51. Ejecute la macro BorrarTodo haciendo un clic en el botn 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
botn Ingreso y se escribira 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 botn de Seal de Prohibido y
listo. La hoja quedar protegida y adems el archivo Vigilancia se habr grabado tambin
automticamente en disco. En pantalla aparecer un mensaje indicando que la hoja ha
quedado protegida.
Cuando se desee quitar la proteccin, vuelva a presionar el botn de Seal de Prohibido y
cuando le solicite la contrasea 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 proteccin a la
hoja.
Una vez retirada la proteccin, en la pantalla aparecer un mensaje indicando que la hoja se
encuentra sin proteccin y entonces podr usted seguir ingresando las dems horas, tanto de

Elaborado por: Daniel Zegarra Zavaleta Pg. 107


salida como de ingreso a medida que pasen los dias. Una vez ingresada una fecha recuerde
que debe volver a conectar la proteccin con un clic en el botn correspondiente.
Si las formulas en la hoja han sido escritas correctamente, los clculos debern realizarse
automticamente.

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 Pg. 108


Resumen de tipos de datos
La tabla siguiente muestra los tipos de datos compatibles, incluyendo el tamao de
almacenamiento y el intervalo.

Tamao de
Tipo de datos Intervalo
almacenamiento
Byte 1 byte 0 a 255
Boolean 2 bytes True o False
Integer 2 bytes -32,768 a 32,767
Long
4 bytes -2,147,483,648 a 2,147,483,647
(entero largo)
Single -3.402823E38 a 1.401298E-45 para valores
(coma flotante/ 4 bytes negativos; 1,401298E-45 a 3,402823E38 para
precisin simple) valores positivos
-1.79769313486231E308 a
Double
-4,94065645841247E-324 para valores negativos;
(coma flotante/ 8 bytes
4,94065645841247E-324 a
precisin doble)
1,79769313486232E308 para valores positivos
Currency -922,337,203,685,477.5808 a
8 bytes
(entero a escala) 922,337,203.685,477.5807
+/-79,228,162,514,264,337,593,543,950,335 sin
punto decimal;
+/-7.9228162514264337593543950335 con 28
Decimal 14 bytes
posiciones a la derecha del signo decimal; el
nmero ms pequeo distinto de cero es
+/-0.0000000000000000000000000001
Date 8 bytes 1 de enero de 100 a 31 de diciembre de 9999
Object 4 bytes Cualquier referencia a tipo Object
String 10 bytes + longitud de la
Desde 0 a 2.000 millones
(longitud variable) cadena
String
Longitud de la cadena Desde 1 a 65,400 aproximadamente
(longitud fija)
Variant Cualquier valor numrico hasta el intervalo de un
16 bytes
(con nmeros) tipo Double
Variant 22 bytes + longitud de la El mismo intervalo que para un tipo String de
(con caracteres) cadena longitud variable
Definido por el
Nmero requerido por El intervalo de cada elemento es el mismo que el
usuario
los elementos intervalo de su tipo de datos.
(utilizando Type)

Nota Las matrices de cualquier tipo de datos requieren 20 bytes de memoria ms cuatro bytes para
cada dimensin de matriz, ms el nmero de bytes que ocupan los propios datos. Puede
calcular la memoria que ocupan los datos multiplicando el nmero de elementos de datos por
el tamao 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 ms 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 ms que la matriz por s sola.

Nota Use la funncin StrConv para converter un dato sting a otro tipo de dato

Elaborado por: Daniel Zegarra Zavaleta Pg. 109


Funciones de conversin de tipos de datos
Cada funcin convierte una expresin a un tipo de datos especfico.
Sintaxis

CBool(expresin) CByte(expresin)

CCur(expresin) CDate(expresin)

CDbl(expresin) CDec(expresin)

CInt(expresin) CLng(expresin)

CSng(expresin) CStr(expresin)

CVar(expresin)

Donde, el argumento obligatorio expresin es cualquier expresin de cadena o expresin numrica.

Tipos devueltos

El nombre de la funcin determina el tipo devuelto, como se muestra a continuacin:

Funcin Tipo devuelto Intervalo del argumento expresin


CBool Boolean Cualquier expresin de cadena o numrica vlida.
CByte Byte 0 a 255.
CCur Currency -922.337.203.685.477,5808 a 922.337.203.685.477,5807.
CDate Date Cualquier expresin de fecha.
-1.79769313486231E308 a
-4,94065645841247E-324 para valores negativos;
CDbl Double
4,94065645841247E-324 a 1,79769313486232E308 para
valores positivos.
+/-79.228.162.514.264.337.593.543.950.335 para nmeros
basados en cero, es decir, nmeros sin decimales. Para
nmeros con 28 decimales, el intervalo es
CDec Decimal
+/-7,9228162514264337593543950335.
La menor posicin para un nmero que no sea cero es
0,0000000000000000000000000001.
CInt Integer -32.768 a 32.767; las fracciones se redondean.
-2.147.483.648 a 2.147.483.647; las fracciones se
CLng Long
redondean.
-3,402823E38 a -1,401298E-45 para valores negativos;
CSng Single
1,401298E-45 a 3,402823E38 para valores positivos.
El mismo intervalo que Double para valores numricos. El
CStr String
mismo intervalo que String para valores no numricos.
El valor de retorno de CStr depende del argumento
CVar Variant
expresin.

Comentarios

Si la expresin del argumento expresin que se pasa a la funcin est fuera del intervalo del
tipo de dato al que se va a convertir, se producir un error.

Elaborado por: Daniel Zegarra Zavaleta Pg. 110


En general, el cdigo se puede documentar utilizando las funciones de conversin de tipos de datos
para indicar que el resultado de alguna de las operaciones se debera expresar como un tipo de datos en
particular, no como el tipo de datos predeterminado. Por ejemplo, utilice Ccur para forzar la ejecucin
de operaciones con aritmtica monetaria en los casos en los que se hara con precisin simple, doble
precisin o aritmtica entera.

Debe utilizar funciones de conversin 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 configuracin regional establecida en su equipo.

Cuando la parte fraccionaria es exactamente 0,5, CInt y CLng siempre redondean al nmero par ms
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 nmero, en lugar de redondear. Adems,
Fix y Int siempre devuelven un valor del mismo tipo del que se le pasa.

Utilice la funcin IsDate para determinar si se puede convertir date a una fecha o una hora. CDate
reconoce literales de fecha y literales de hora adems de nmeros comprendidos dentro del intervalo de
fechas aceptables. Al convertir un nmero a una fecha, la parte numrica entera se convierte a una
fecha. Cualquier parte fraccionaria del nmero se convierte a la hora del da, comenzando a
medianoche.

CDate reconoce formatos de fecha que se ajusten a la configuracin regional de su sistema. Es posible
que no se determine el orden correcto del da, mes y ao si se proporciona en un formato diferente del
que reconoce la configuracin de fecha. Adems, no se puede reconocer un formato de fecha largo si
contiene la cadena del da de la semana.

Se proporciona una funcin CVDate por compatibilidad con versiones anteriores de Visual Basic. La
sintaxis de la funcin CVDate es idntica a la de la funcin CDate; sin embargo, CVDate devuelve un
Variant de subtipo Date en lugar del tipo Date real. Puesto que ahora hay un tipo de dato intrnseco
Date, no es necesario CVDate. Se puede observar el mismo efecto al convertir una expresin a Date y
asignarla despus a un Variant. Esta tcnica es coherente con la conversin de todos los dems tipos
intrnsecos a sus equivalentes subtipos Variant.

Nota La funcin CDec no devuelve un tipo de dato discreto; en su lugar, siempre devuelve un
Variant con los valores convertidos a un subtipo Decimal.

Conversin, resumen de palabras clave


Accin Palabras clave
Valor ANSI a cadena. Chr
Cadena a minsculas o a maysculas. Format, LCase, UCase
Fecha a nmero de serie. DateSerial, DateValue
Nmero decimal a otra base. Hex, Oct
Nmero a cadena. Format, Str
Un tipo de dato a otro. CBool, CByte, CCur, CDate, CDbl, CDec, CInt,
CLng, CSng, CStr, CVar, CVErr, Fix, Int
Fecha a da, mes, da de la semana o ao. Day, Month, Weekday, Year
Hora a hora, minuto o segundo. Hour, Minute, Second
Cadena a valor ASCII. Asc
Cadena a nmero. Val
Hora a nmero de serie. TimeSerial, TimeValue

Elaborado por: Daniel Zegarra Zavaleta Pg. 111


Equivalencia de Funciones en Espaol e Ingls
Espaol Ingls Sintaxis Descripcin
Busca horizontalmente datos en una
=BUSCARH =HLOOKUP =HLOOKUP(dato,tabla de busqueda,#fila,modo de busqueda)
tabla
=BUSCARV =VLOOKUP =VLOOKUP(dato,tabla de busqueda,#columna,modo de busqueda) Busca verticalm ente 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 divisin
Indica en que columna se encuentra la
=COLUMNA =COLUMN =COLUMN(celda o rango) referencia dada
Indica cuantas columnas tiene el rango
=COLUMNAS =COLUMNS =COLUMNS(celda o rango) dado
=CONCATENAR =CONCATENATE =CONCATENATE(texto1,texto2,) Une los textos de varias celdas
=CONTAR =COUNT =COUNT(rango) Cuenta celdas con datos tipo numero
Cuenta celdas que cumplen con un
=CONTAR.SI =COUNTIF =COUNTIF(rango de busqueda,dato) criterio
=CONTARA =COUNTA =COUNTA(rango) Cuenta celdas ocupadas en un rango
Extrae caracteres indicados del lado
=DERECHA =RIGHT =RIGHT(texto,#caracteres) derecho de un texto
Indica el dia de la semana (1 al 7) de
=DIASEM =WEEKDAY =WEEKDAY(fecha)
una fecha
Elige la alternativa que se indique en el
=ELEGIR =CHOOSE =CHOOSE(numero,accion1,accion2,) primer argumento
Da respuestas enteras ignorando los
=ENTERO =INT =INT(valor)
decimales
=ESBLANCO =ISBLANK =ISBLANK(celda) Da verdadero si una celda esta vaca
Da verdadero si una celda contiene error
=ESERROR =ISERROR =ISERROR(celda o formula)

Da verdadero si una celda contiene un


=ESNUMERO =ISNUMBER =ISNUMBER(celda o formula) numero
Da verdadero si una celda contiene
=ESTEXTO =ISTEXT =ISTEXT(celda o formula) texto
Extrae caracteres indicados del interior
=EXTRAE =MID =MID(texto,posicion inicial ,#caracteres) de un texto
Indica en que fila se encuentra la
=FILA =ROW =ROW(celda o rango)
referencia dada
=FILAS =ROWS =ROWS(celda o rango) Indica cuantas filas tiene el rango dado
=HOY =TODAY =TODAY() Da la fecha actual
Extrae la referencia escrita en una celda
=INDIRECTO =INDIRECT =INDIRECT(celda)
Extrae caracteres indicados del lado
=IZQUIERDA =LEFT =LEFT(texto,#caracteres)
izquierdo de un texto
Encuentra uno de los num eros mayores
=K.ESIMO.MAYOR =LARGE =LARGE(rango,posicin) segn posicin que se indique
Encuentra uno de los num eros menores
=K.ESIMO.MENOR =SMALL =SMALL(rango,posicin) segn posicin 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
Da verdadero si una de las expresiones
=O =OR =OR(expresiones logicas)
es verdadera
=PI =PI =PI() Numero Pi: 3.1415926.
=POTENCIA =POWER =POW ER(numero,potencia) Eleva un numero a una potencia
=PROMEDIO =AVERAGE =AVERAGE(rango) Calcula el promedio de varios numeros
Calcula o predice un valor futuro en una
=PRONOSTICO =FORECAST =FORECAST(x,valores x, valores y) tendencia lineal usando valores
existentes
=RAIZ =SQRT =SQRT(valor) Calcula la raiz cuadrada
Redondea una cantidad a los decimales
=REDONDEAR =ROUND =ROUND(valor,#decimales)
que se indiquen
Redondea al numero inmediato superior
=REDONDEAR.MAS =ROUNDUP =ROUNDUP(valor,#decimales) segn la cantidad de decimales que se
indique
Redondea al numero inmediato inferior
=REDONDEAR.MENOS =ROUNDDOW N =ROUNDDOWN(valor,#decimales) segn la cantidad de decimales que se
indique

Elaborado por: Daniel Zegarra Zavaleta Pg. 112


Teclas de Funcin en Microsoft Excel

Tecla Funcin Shift Ctrl Alt


Abrir ventana de Abrir o cerrar el Insertar una hoja de
F1
ayuda Panel de Tareas grafico
Modificar la celda Modificar el Men
F2 activa comentario de la Archivo/Guardar
celda activa como
Pegar un nombre en Pegar una funcin Definir un nombre Men
F3
una formula en una formula de rango Insertar/Nombre/Crear
Repetir la ultima Repetir el ultimo Cerrar la ventana Cerrar la ventana de
F4 accin Buscar (Buscar del libro actual Excel
siguiente)
Ir a Men Restaurar el tamao
F5
Edicin/Buscar de la ventana
Ir al siguiente Panel Ir al Panel Anterior Ir a la siguiente Ir a la primera ventana
F6
ventana del libro del libro anterior
Men Mover la ventana
F7 Herramientas/ del libro actual
Ortografa
Ampliar una Agregar selecciones Cambiar el tamao Mostrar la ventana de
F8
seleccin de celdas mltiples de celdas de la ventana dilogo Macro
Calcular todas la Calcular la hoja Minimizar la
F9 hojas de todos los activa ventana del libro
libros abiertos activo
Activar la barra de Presentar un men Maximizar o
F10 men contextual restaurar la ventana
del libro actual
Crear un grafico Insertar una nueva Insertar una hoja de Abrir el Editor de
F11
hoja de calculo Macros (Excel 4.0) Visual Basic
Men Archivo/ Men Archivo/ Men Archivo/
F12
Guardar como Guardar (Ctrl+G) Abrir

Tecla Funcin Shift Ctrl Alt

Elaborado por: Daniel Zegarra Zavaleta Pg. 113


Cdigos ASCII para caracteres especiales:

1 26 51 3 76 L 101 e 126 ~ 151 176 201 226 251


2 27 52 4 77 M 102 f 127 152 177 202 227 252
3 28 53 5 78 N 103 g 128 153 178 203 228 253
4 29 54 6 79 O 104 h 129 154 179 204 229 254
5 30 55 7 80 P 105 i 130 155 180 205 230 255
6 31 56 8 81 Q 106 j 131 156 181 206 231
7 32 57 9 82 R 107 k 132 157 182 207 232
8 33 ! 58 : 83 S 108 l 133 158 183 208 233
9 34 " 59 ; 84 T 109 m 134 159 184 209 234
10 35 # 60 < 85 U 110 n 135 160 185 210 235
11 36 $ 61 = 86 V 111 o 136 161 186 211 236
12 37 % 62 > 87 W 112 p 137 162 187 212 237
13 38 & 63 ? 88 X 113 q 138 163 188 213 238
14 39 64 @ 89 Y 114 r 139 164 189 214 239
15 40 ( 65 A 90 Z 115 s 140 165 190 215 240 -
16 41 ) 66 B 91 [ 116 t 141 166 191 216 241
17 42 * 67 C 92 \ 117 u 142 167 192 217 242
18 43 + 68 D 93 ] 118 v 143 168 193 218 243
19 44 , 69 E 94 ^ 119 w 144 169 194 219 244
20 45 - 70 F 95 _ 120 x 145 170 195 220 245
21 46 . 71 G 96 ` 121 y 146 171 196 221 246
22 47 0 72 H 97 a 122 z 147 172 197 222 247
23 48 1 73 I 98 b 123 { 148 173 198 223 248
24 49 2 74 J 99 c 124 | 149 174 199 224 249
25 50 3 75 K 100 d 125 } 150 175 200 225 250

Teclas de Mtodo Abreviado:

Alt + Enter.- Para escribir en la siguiente lnea dentro de la celda actual.


Ctrl + Enter.- Para escribir un mismo dato simultneamente en todas las celdas
previamente seleccionadas.
Ctrl + asterisco.- Para seleccionar la regin actual. (Llmese regin 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
direccin de la flecha.
Ctrl + Shift + flecha.- A partir de la celda actual selecciona todas las celdas hasta la ltima
celda ocupada en la direccin de la flecha.

Elaborado por: Daniel Zegarra Zavaleta Pg. 114


Contenido

Contenido del Curso .................................................................................................................. 1


1. LaProgramacinenExcel ............................................................................................ 3
a. Usodelagrabadorademacros ........................................................................................... 3
b. Queeslagrabadorademacros ........................................................................................... 3
c. Ejecucindeunamacro ...................................................................................................... 3
d. Cmoeselprogramacreadoporlagrabadorademacros ................................................... 5
e. ComoverelprogramaenelEditordeVisualBasic .............................................................. 5
f. Cmoeliminarunamacro ................................................................................................... 7
EjercicioN1:Accionesrepetitivasconmacros ........................................................................... 8
2. EscrituradeprogramasenelEditordeVisualBasic ................................................... 11
a. QueesVisualBasicparaAplicaciones................................................................................ 11
b. ElEditordeVisualBasic..................................................................................................... 11
3. LasinstruccionesdeVisualBasic................................................................................ 12
a. Continuarinstruccionesenmltipleslneas....................................................................... 13
b. Aadircomentarios........................................................................................................... 13
c. Comprobarerroresdesintaxis .......................................................................................... 14
4. Escribirinstruccionesdedeclaracin .......................................................................... 14
a. QusonlostiposdedatosVariant .................................................................................... 15
5. Escribirinstruccionesdeasignacin ........................................................................... 15
6. TrabajoconceldasenVisualBasic ............................................................................. 16
a. ReferenciaaceldasyrangosutilizandolanotacinA1 ...................................................... 16
b. Sentenciasusadasparamanejarceldasyrangosdeceldas................................................ 17
7. Paraseleccionarceldasyrangosdeceldas ................................................................ 17
a. Seleccindirectadeceldasyrangos.................................................................................. 17
b. Seleccinderangosdemanerarelativa:............................................................................ 18
c. Seleccinconsecutivadeceldasocupadasovacas: .......................................................... 19
d. SeleccindirectadeColumnas .......................................................................................... 19
e. SeleccinrelativadeColumnas ......................................................................................... 19
f. SeleccindirectadeFilas................................................................................................... 20
g. SeleccinindirectadeFilas................................................................................................ 20
h. Paradesplazarelpunterodecelda:................................................................................... 21
i. Paraborrarrangosdeceldas: ............................................................................................ 22

Elaborado por: Daniel Zegarra Zavaleta Pg. 115


j. Paraeliminarfilasocolumnasenteras: ............................................................................. 22
k. Parainsertarfilasocolumnas:........................................................................................... 23
l. Paranombrarunrangodeceldas: ..................................................................................... 23
EjercicioN2:ProcedimientosSubparaseleccionarrangos...................................................... 24
LaPropiedadEnd....................................................................................................................... 30
EjercicioN3:Nombrarrangos,SeleccionarcolumnasyBorrar ............................................... 31
m. Paraingresardatosenceldasyrangosdeceldas............................................................... 34
EjercicioN4:Asignarvaloresaceldasyrangos ....................................................................... 34
n. UsosdelmtodoSelectylapropiedadSelection............................................................... 36
EjercicioN5:ProcedimientosSubparaCambiodemoneda .................................................. 38
EjercicioN6:ProcedimientosSubparaAhorropersonal ......................................................... 41
8. UsodefuncionesdehojadeclculodeMicrosoftExcelenVisualBasic ..................... 44
a. ListadelasfuncionesdehojadeclculoquesepuedenusarenVisualBasic..................... 44
b. ComollamaraunafuncindehojadeclculodesdeVisualBasic...................................... 46
c. Insertarunafuncindehojadeclculoenunacelda......................................................... 47
d. LaFuncinInputBox.......................................................................................................... 47
e. ElMtodoInputBox .......................................................................................................... 48
EjercicioN7Pagodeunprstamohipotecario..................................................................... 51
9. FuncionespropiasdeVisualBasic .............................................................................. 54
a. Listabrevedelasfuncionesmscomunes .........................................................................................54

10. EstructurasdeControlenlasinstruccionesmacro.................................................. 56
f. Quesonlassentenciasdecontrol ..................................................................................... 56
g. QuehacenlasInstruccionesCondicionales........................................................................ 56
h. QuehacenlasInstruccionesdeBucle ................................................................................ 56
i. QuehacenlasInstruccionesdeejecucinmltiple ............................................................ 56
11. LaInstruccinIf...Then...Else .................................................................................. 57
a. ComousarlasinstruccionesIf...Then...Else ....................................................................... 58
b. EjecutarunasolainstruccincuandolacondicinesVerdadera........................................ 58
c. EjecutarunasinstruccionessilacondicinesVerdaderayejecutarotrassiesFalsa.......... 59
d. ComprobarunasegundacondicinsilaprimeracondicinesFalsa................................... 59
12. LaInstruccinWhile...Wend................................................................................... 60
13. LaInstruccinFor...Next......................................................................................... 60
a. ComousarlasinstruccionesFor...Next .............................................................................. 62
14. LaInstruccinSelectCase....................................................................................... 63
a. ComousarlainstruccionSelectCase ................................................................................. 64

Elaborado por: Daniel Zegarra Zavaleta Pg. 116


15. LaInstruccinDo...Loop ......................................................................................... 65
a. ComousarlasinstruccionesDo...Loop .............................................................................. 66
b. RepetirinstruccionesmientrasunacondicinesVerdadera .............................................. 66
c. PararepetirinstruccioneshastaqueunacondicinllegueaserVerdadera ....................... 67
d. ParasalirdeDo...Loopdesdedentrodelbucle .................................................................. 67
16. LainstruccinForEach...Next ................................................................................ 68
a. ComousarlasinstruccionesForEach...Next ...................................................................... 69
b. Pararecorrerunconjuntodeelementos ........................................................................... 69
c. ParasalirdeunbucleForEach...Nextantesdequefinalice............................................... 70
17. LainstruccinWith ................................................................................................ 71
a. ComousarlasinstruccionesWith...................................................................................... 71
18. Creacindeformulariosuserforms......................................................................... 74
a. Paracrearunformulario ................................................................................................... 74
b. Paradisearunformulario................................................................................................ 74
EjercicioN8LlenarunRegistrodealumnos ......................................................................... 75
PrcticaDeLaboratorioN1 ...................................................................................................... 80
1raParte: CreacinelCuadrodeViajesylaTabladeTarifas ................................................. 81
2daParte: GrabarlamacroqueregistrelascarrerasenelCuadrodeViajes........................... 82
PrcticaDeLaboratorioN2 ...................................................................................................... 86
PrcticaDeLaboratorioN3 ...................................................................................................... 89
PrcticaDeLaboratorioN4 ...................................................................................................... 95
PrcticaDeLaboratorioN5 ...................................................................................................... 99
1raParte: CreacindelCuadrodePagoporVigilancia........................................................... 99
2daParte: CreacindemacrosparaautomatizarelCuadro ................................................. 105
Resumendetiposdedatos...................................................................................................... 109
Funcionesdeconversindetiposdedatos.............................................................................. 110
Conversin,resumendepalabrasclave ................................................................................... 111
EquivalenciadeFuncionesenEspaoleIngls ........................................................................ 112
TeclasdeFuncinenMicrosoftExcel....................................................................................... 113
CdigosASCIIparacaracteresespeciales: ................................................................................ 114
TeclasdeMtodoAbreviado: .................................................................................................. 114
Contenido ............................................................................................................................... 115

Elaborado por: Daniel Zegarra Zavaleta Pg. 117

S-ar putea să vă placă și