Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Formularios
Los controles de formulario nos ayudan a hacer más ágil y sencillo el manejo de una hoja de
cálculo. Estos controles nos permiten conseguir que el aspecto visual de la hoja de cálculo sea
más atractivo, hacen que la hoja sea más sencilla de manejar y nos permiten controlar la
pantalla la ficha Programador y el grupo Controles. Podemos hacer visible esta barra de
opciones.
Tipos de controles
Vamos a ver los distintos tipos de controles de los que disponemos y las propiedades que
Etiqueta
En una etiqueta podemos insertar texto que proporcione información sobre un control. Este
Cuadro de edición
Excel-Visual Basic Ing. Ronald Chambi Inca.
Cuadro de grupo
Permite agrupar controles relacionados como botones de opción o casillas de verificación. Este
Botón
Ejecuta una macro cuando se hace clic sobre él. Este control no tiene propiedades para
configurar. Al insertarlo nos permite asignarle una macro o grabarla en ese momento.
Casilla de verificación
Activa o desactiva una opción. Pueden activarse varias casillas de verificación a la vez si las
incluimos en un cuadro de grupo. Las propiedades de este control son las siguientes: Valor
(estado inicial de la casilla reverificación que puede ser: activado o desactivado) y Vincular con
Botón de opción
Selecciona una de las opciones contenidas en un cuadro de grupo. Los botones de opción
solamente permiten elegir una opción de entre varias. Las propiedades de este control son las
siguientes: Valor (estado inicial del botón de opción que puede ser: activado o desactivado) y
Vincular con la celda (celda en la que se devuelve el número de botón de opción seleccionado
Cuadro de lista
Excel-Visual Basic Ing. Ronald Chambi Inca.
Muestra una lista de elementos. Las propiedades de este control son las siguientes: Rango de
entrada (rango de celdas que contiene los valores que se muestran en la lista), Vincular con la
celda (celda en la que se devuelve el número del elemento seleccionado en el cuadro de lista)
y Tipo de selección (especifica el modo en que pueden seleccionarse los elementos de la lista:
simple o múltiple).
Cuadro combinado
Muestra una lista de elementos mediante una lista desplegable. Las propiedades de este
control son las siguientes: Rango de entrada (rango de celdas que contiene los valores que se
muestran en la lista), Vincular con la celda (celda en la que se devuelve el número del
Barra de desplazamiento
Sirve para desplazarse a través de un rango de valores cuando se hace clic en las flechas de
control son las siguientes: Valor actual (posición relativa del cuadro de desplazamiento dentro
extremo derecho de una barra de desplazamiento horizontal), incremento (tamaño del espacio
cualquier extremo de la barra de desplazamiento), cambio de página (tamaño del espacio que
desplazamiento y una de las flechas de desplazamiento) y vincular con la celda (celda en la que
Control de número
Aumenta o disminuye un valor haciendo clic en flecha arriba y flecha abajo, respectivamente.
Las propiedades de este control son las siguientes: Valor actual (posición relativa del control de
número dentro del rango de valores permitidos), Valor mínimo (valor más bajo permitido para
el control de número), Valor máximo (valor más alto permitido para el control de número),
Incremento (cantidad de aumento o disminución del control de número cada vez que se hace
clic en las flechas) y Vincular con la celda (celda en la que se devuelve la posición actual del
cuadro de desplazamiento).
Ejemplo 01.-
Tenemos una hoja de cálculo que obtiene la cuota mensual a pagar por un préstamo. El
usuario debe introducir el importe a solicitar y el número de años en los que va a pagar el
préstamo. También debe seleccionar si prefiere un tipo de interés variable (4,00%) o fijo
(5,25%).
Excel-Visual Basic Ing. Ronald Chambi Inca.
Procedimientos Generales
Son los procedimientos que se ejecutan solo cuando se hace una llamada explicita a dicho
Según el lugar de la aplicación donde los podemos llamar, los procedimientos generales
pueden ser:
Los procedimientos a nivel de formulario son aquellos que se pueden llamar o ejecutar solo
Los procedimientos a nivel modulo son procedimientos públicos; es decir, se pueden llamar o
Private Indica que se puede tener acceso al procedimiento solo desde los
Public Indica que se pude tener acceso al procedimiento desde todos los
Static Indica que se conservan los valores de las variables locales del
Constantes
desarrollo de todo el programa el cual no se puede cambiar. Las constantes se definen con la
Define la constante saludo que tendrá el texto Buenos días durante la ejecución del programa.
Esto quiere decir que si se desea utilizar el texto puede utilizar solo la constante saludo. Así, la
Const IGV = 18
Si durante el desarrollo del programa escribimos por ejemplo IGV = 16 para cambiar el valor a
Variables
Una variable es un elemento con un nombre determinado que contiene un valor en forma
temporal hasta que la aplicación finalice. El valor puede variar en cualquier momento de la
Si una variable se declara a nivel de procedimiento, significa que conserva su valor en cualquier
Si una variable se declara a nivel de formulario, significa que conserva su valor en cualquier
1 Ámbito
El Ámbito indica en qué lugar de la aplicación dese utilizar la variable y puede ser una de las
Static Se utiliza solo a nivel de procedimiento. Cuando una variable se declara con la
palabra STATIC, Visual Basic no reinicializa la variable cada vez que se ejecuta el
procedimiento, solo lo hace la primera vez. Esto quiere decir que la variable
Private Se utiliza a nivel de modulo e indica que la variable es privada; es decir, solo va a
Public Se utiliza solo a nivel de modulo e indica que la variable es publica; es decir, va a
2 Nombre
variable tiene que comenzar con una letra y puede tener como máximo 255 caracteres. Los
caracteres pueden ser letras, dígitos, el carácter subrayado y los caracteres de declaración del
tipo de la variable (%,&,!,#,@ y $). El nombre de la variable no puede ser una palabra
3 Tipo
Es opcional y determina qué clase de valores puede almacenar una variable. Si no indica el tipo
Tipos de Variables
922.337.203.685.477,5807
+/-0,0000000000000000000000000001
Operadores Aritméticos
* Multiplicación ^ Exponenciación
Excel-Visual Basic Ing. Ronald Chambi Inca.
Ejemplos
Operación Resultado
5+13 18
80-4 76
7*6 42
13/2 6.5
13\2 6
13 mod 2 1
4^3 64
12+14/2 19
(12+14)/2 13
1 Exponenciación(^)
2 Negación (-)
Nota:
Excel-Visual Basic Ing. Ronald Chambi Inca.
derecha.
Los paréntesis cambian el orden de operación porque toda expresión que tenga paréntesis se
ejecuta primero y si existen varios paréntesis primero se ejecutan los paréntesis, más internos.
Por ejemplo, si las notas de un alumno son 12 y 14, la siguiente expresión: 12+14/2 dará como
Comentarios
Los comentarios son textos que se pueden utilizar para documentar nuestra aplicación
funciona. Este texto explicativo y aclaratorio es ignorado por la computadora cuando muestra
aplicación se ejecuta.
apostrofe (‘).
1.
‘ El valor de a se incrementa en 1
A = A +1
A = A +1
Nota: Cuando se insertan los comentarios se visualizan con un color diferente al de las
MSGBOX
Valor
0 vbOKOnly Ok(Aceptar)
1 vbOKCancel Ok y Cancelar
4 vbYesNo Si y no
Icono de interrogación 32
Icono de exclamación 48
Icono de información 64
Nota:
Para visualizar los botones con los iconos se debe sumar los valores de cada uno de ellos. Por
ejemplo para visualizar los botones si y no y el icono de interrogación el valor será: 4+32 o
simplemente 36. También se puede usar las constantes en lugar de los valores. Si queremos
que el mensaje ocupe varias líneas, se debe usar Chr(13) al final de cada línea.
1 vbOk Ok (Aceptar)
2 vbCancel Cancelar
Excel-Visual Basic Ing. Ronald Chambi Inca.
3 vbAbort Anular
4 vbRetry Reintentar
5 vbIgnore Ignorar
6 vbYes Si
7 vbNo No
Ejemplo
1.
Dim R As Integer
Si el usuario hace clic en el botón Si, la variable R toma el valor de 6 y si hace click en el botón
2.
Dim T As Integer
Si el usuario hace click en el botón Aceptar, la Variable T toma el valor de 1 y si hace click en el
InputBox
Muestra una caja con un mensaje y permite además que el usuario pueda ingresar un dato el
predeterminado
Fila Es un valor que indica la posición vertical del formulario donde se desea
Permite ingresar el precio de venta del dólar, mostrando en forma automática el precio de
3.35 para cada dólar en la posición horizontal 2000 y vertical 1000, muestra la siguiente caja de
ingreso:
Nota:
La variable y el mensaje es lo único obligatorio que se debe utilizar en la función InputBox. Por
ejemplo, la instrucción:
Si no desea utilizar alguno de los otros parámetros intermedio, debe utilizar siempre las
comas.
Por ejemplo, en la siguiente instrucción no se indica el precio que debe salir en forma
automática.
Si no desea utilizar los últimos parámetros, no es necesario que utilice las comas.
Por ejemplo, en la siguiente instrucción no se indica el precio que debe salir en forma
posición:
Si desea escribir el mensaje en varias líneas, utilice Chr(13) (Retorno de carro) 0 Chr(10) o las
P = InputBox("Ingrese el precio de venta" & Chr(13) & "Al " & Str(Now), "Venta de Dólares")
Contadores y acumuladores
Un contador es una variable numérica que permite contar algún evento que ocurre durante la
Cada vez que la computadora ejecuta esta instrucción, el valor de la variable A se incrementa
en 1.
Ejemplo: R = R + F
Cada vez que la computadora ejecuta esta instrucción en la variable R acumula el valor de la
variable F.
Antes de pasar a cosa más importantes, le sugiero que lea todo el material de esta sección
Código: Las acciones de VBA se realizan ejecutando código VBA. Se escribe (o graba)
Módulos: los módulos VBA están almacenados en un libro de Excel, pero vemos o
Procedimientos.
que realiza alguna acción. VBA admite dos tipos de procedimientos: Sub y Function.
llamado Test, que realiza una sencilla suma y después muestra el resultado en
un cuadro de mensaje.
Sub Test()
Sum = 1+1
End sub
End Function
Excel-Visual Basic Ing. Ronald Chambi Inca.
Objetos: VBA manipula los objetos que se encuentran en su aplicación anfitriona (en
este caso, Excel es dicha aplicación). Excel ofrece más de 100 clases de objetos para
manipular. Entre los ejemplo de objetos se encuentran libros, hojas, rangos de hojas,
podemos manipularlos utilizando el código VBA. Las clases de objetos están ordenados
por jerarquías. Los objetos puede actuar como contenedores para otros objetos. Por
Worksheet puede contener objetos tales como Range, PivotTable y así sucesivamente.
Application.Workbooks (“Libro1.xlsx”)
Application.Workbooks(“Libro1.xlsx”).Worksheets (“Hoja1”)
Todavía se puede llevar esto a otro nivel más referirse a celdas específicas, como se
indica a continuación.
Application.Workbooks(“Libro1.xlsx”).Worksheets(“Hoja1”).Range (“A1”)
Objetos activos: Si se omite una referencia específica a un objeto, Excel utiliza los
objetos activos. Si el libro activo es Libro 1, la referencia anterior se puede hacer más
simple:
Excel-Visual Basic Ing. Ronald Chambi Inca.
Worksheets(“Hoja1”).Range(“A1”)
Si se sabe que la hoja activa es Hoja1, se puede simplificar la referencia aún más:
Range(“A1”)
Propiedades de objetos: Los objetos tiene propiedades. Podemos imaginar que una
propiedades como Value y Address. Podemos utilizar VBA para determinar las
objeto con la propiedad, separados por un punto. Por ejemplo, podemos referirnos al
Worksheets(“Hoja1”).Range(“A1”).Value
Worksheets(“Hoja1”).Range(“A1”).Address
Variables en VBA: podemos asignar valores a variables VBA. Piense en una variable
como en un nombre que puede utilizar para almacenar un determinado valor. Para
Interest = Worksheets(“Hoja1”).Range(“A1”).Value
Métodos de objetos: Los objetos tienen métodos que es una acción que se realiza
sobre el objeto. Por ejemplo, uno de los métodos para un objeto Range es
Excel-Visual Basic Ing. Ronald Chambi Inca.
ClearContents. Este método borra los contenidos del rango. Los métodos se
especifican combinado el objeto con el método, separados por un punto. Por ejemplo,
para borrar los contenidos de la celda A1 de una hoja activa, utilizaríamos la siguiente
instrucción:
Worksheets(“Hoja1”).Range(“A1”).ClearContents
Gran parte del trabajo que realizamos en VBA incluye trabajar con las celdas y rangos de las
hojas. Después de todo, para eso es para lo que estas diseñadas las hojas de cálculo.
Un objeto Range está contenido en un objeto Worksheet y consta de una única celda o serie
Propiedad Range
Worksheets("Hoja1").Range("A1").Value = 12.3
Excel-Visual Basic Ing. Ronald Chambi Inca.
La propiedad Range también reconoce nombres definidos en libros. Por lo tanto, si una celda
se llama Datos, podemos utilizar la siguiente instrucción para introducir un valor en esa celda
con nombre:
Worksheets("Hoja1").Range("Datos").Value = 12.3
Worksheets("Hoja1").Range("A1:B10").Value = 2
Worksheets("Hoja1").Range("A1", "B10").Value = 2
Range("A1,A3,A5,A7,A9").Value = 4
Range(en este caso, el objeto Range es la celda activa). Este ejemplo trata a dicho objeto
como si fuera la celda superior izquierda de la hoja y luego introduce el valor 5 en la celda que
sería B2.
En otras palabras, la referencia devuelta es relativa a la esquina superior izquierda del objeto
Range.
ActiveCell.Range("B2") = 5
Excel-Visual Basic Ing. Ronald Chambi Inca.
La propiedad Cells
Otro ejemplo de hacer un rango es utilizar la propiedad Cells. Tal y como ocurría con la
Veamos algunos ejemplos que muestran cómo utilizar la propiedad Cells. El primero introduce
el valor 9 en la celda 1 de la Hoja1. En este caso, estamos utilizando la primera sintaxis, que
(entre 1 y 16384).
Worksheets("Hoja1").Cells(1, 1) = 9
Este ejemplo introduce el valor 7 en la celda D3 (es decir, fila 3, columna 4) de la hoja activa:
ActiveSheet.Cells(3, 4) = 7
También podemos utilizar la propiedad Cells de un objeto Range. Cuando hacemos eso, el
objeto Range devuelto por la propiedad Cells será relativo a la celda superior izquierda de
acláralo.
La siguiente instrucción introduce el valor 5 en la celda activa. Recuerda, en este caso, que la
ActiveCell.Cells(1, 1) = 5
Esta sintaxis también puede utilizarse con un objeto Range. En este caso, la celda que se
devuelve es relativa al objeto Range al que se hace referencia. Por ejemplo, si el objeto Range
es A1:D10 (40 celdas), la propiedad Cells puede tener un argumento de 1 a 40 y devolver una
Excel-Visual Basic Ing. Ronald Chambi Inca.
celda A2 es la quinta celda (contando desde la parte superior derecha hacia abajo) en el rango
Range("A1:D10").Cells(5) = 2000
Propiedad Offset
La propiedad Offset (como las propiedades Range y Cells) también devuelve un Objeto Range.
Pero a diferencia de los otros dos métodos comentados, la propiedad Offset solo se aplica a un
celda superior izquierda del objeto Range especificado. Los argumentos pueden ser positivos
(abajo o derecha), negativos (arriba o izquierda), o con un valor de cero. El siguiente ejemplo
ActiveCell.Offset(1, 0).Value = 12
ActiveCell.FormulaR1C1 = "1"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "2"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "3"
ActiveCell.Offset(-2, 0).Range("A1").Select
Excel-Visual Basic Ing. Ronald Chambi Inca.
para introducir un valor en una celda. Sin embargo, utilizar FormulaR1C1 o incluso Formula
perfectamente:
ActiveCell.FormulaR1C1 = "1"
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "2"
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "3"
ActiveCell.Offset(-2, 0).Select
De hecho, es una versión mucho más eficiente de la macro que no utiliza la selección para
nada:
ActiveCell = 1
ActiveCell.Offset(1, 0) = 2
ActiveCell.Offset(2, 0) = 3
Los ejemplos de esta sección muestran como manipular rangos de hojas con VBA,
tipos de información en un rango, así como para solicitar el valor de una celda, determinar la
primera celda vacía en una columna, poner en pausa una macro para permitir que el usuario
Excel-Visual Basic Ing. Ronald Chambi Inca.
seleccione un rango, contar las celdas de un rango, recorrer en bucle las celdas de un rango y
Copiar un rango
Por ejemplo, si grabamos una sencilla operación de copiar y pegar, la grabadora generara cinco
Range("A1").Select
Selection.Copy
Range("B1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Este procedimiento se puede reemplazarse por otra rutina mucho más simple, que no
selecciona celdas. También aprovecha el hecho de que le método copy puede utilizar un
Range("A1").Copy Range("B1")
Otro modo de realizar esta tarea es utilizar variables de objetos para representar los rango,
rng1.Copy rng2
Como era de esperar, la copia no está limitada a una sola celda cada vez. Por ejemplo, el
siguiente procedimiento copia un gran rango. Observe que el destino consiste en un sola celda
(que representa la celda superior izquierda del destino). Utilizar una sola celda como destino
Range("A1:C800").Copy Range("D1")
Mover un rango
Como muestra el siguiente ejemplo, las instrucciones de VBA para mover un rango son muy
similares a las de copiar un rango. La diferencia es que estas utilizan el método Cut en lugar del
método Copy.
Observamos que solo tenemos que especificar la celda superior izquierda del rango de destino.
El siguiente ejemplo mueve 18 celdas (A1; C6) a una nueva ubicación, empezando pos la celda
H1:
Range("A1:C6").Cut Range("H1")
En muchos casos, tendremos que copiar una serie de celdas, pero no sabremos las
dimensiones exactas de las filas y columnas de rango. Por ejemplo, podríamos tener un libro
que registrase las ventas semanales y el número de filas cambiaria semanalmente cuando
Como no sabemos la dirección exacta del rango en todo momento, escribir una macro para
La siguiente macro muestra como copiar este rango desde Hoja1 a Hoja2 (empezando por la
celda A1). Utiliza la propiedad CurrentRegion, que devuelve un objeto Range que corresponde
al bloque de celdas en torno a una determinada celda (en este caso, A1).
Range("A1").CurrentRegion.Copy Sheets("Hoja2").Range("A1")
Gran parte del trabajo que realizamos en VBA implica trabajar con rangos (seleccionándolos o
método End del objeto Range. El método end toma un argumento que determina la dirección
Range(ActiveCell, ActiveCell.End(xlDown)).Select
Este último ejemplo similar que utiliza una celda especifica como punto de partida:
Range(Range("A2"), Range("A2").End(xlDown)).Select
Excel-Visual Basic Ing. Ronald Chambi Inca.
Algo que suele solicitar es introducir un valor en la siguiente celda vacía de una columna o una
fila. El siguiente ejemplo pide al usuario un nombre y un valor y después introduce el dato en
Cells(sig_fila, 1) = nombre
Cells(sig_fila, 2) = cantidad
funciona esto, pruebe a usar el equivalente manual: Active la última celda de la Columna A y
luego pulse Fin seguido de la Flecha arriba. En este punto, la última celda que no este en
blanco de la columna A será seleccionada. La propiedad Row devuelve este número de fila y va
incrementándose en uno para poder obtener la fila de la celda debajo de ella. En lugar de
Excel-Visual Basic Ing. Ronald Chambi Inca.
escribir más código para la última celda de la columna A, utilizamos Rows.Count. De esta
Podríamos crear una macro que funcione con el rango de celdas seleccionada. Usamos la
propiedad count del objeto Range para determinar cuántas celdas se encuentran en la
MsgBox Selection.Count
Si la hoja activa contiene un rango llamado Datos, la siguiente instrucción asignara el número
Num_cell = Range("Datos").Count