Sei sulla pagina 1di 31

Excel-Visual Basic Ing. Ronald Chambi Inca.

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

entrada de datos evitando que se introduzcan valores incorrectos.

Para insertar controles de formulario en nuestra hoja de cálculo, necesitamos tener en

pantalla la ficha Programador y el grupo Controles. Podemos hacer visible esta barra de

herramientas seleccionando Opciones de Excel -> Mostrar ficha programador en la cinta de

opciones.

Tipos de controles

Vamos a ver los distintos tipos de controles de los que disponemos y las propiedades que

podemos configurar en cada uno de ellos.

Etiqueta

En una etiqueta podemos insertar texto que proporcione información sobre un control. Este

control no tiene propiedades para configurar.

Cuadro de edición
Excel-Visual Basic Ing. Ronald Chambi Inca.

Control no disponible. Se proporciona para la entrada de datos.

Cuadro de grupo

Permite agrupar controles relacionados como botones de opción o casillas de verificación. Este

control no tiene propiedades para configurar.

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

la celda (celda en la que se devuelve el estado de la casilla de verificación, 1 cuando está

activada y 0 cuando esta desactivada).

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

dentro del grupo de opciones).

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

elemento seleccionado en el cuadro de lista) y Líneas de unión verticales (número de líneas

que se muestran en el desplegable).

Barra de desplazamiento

Sirve para desplazarse a través de un rango de valores cuando se hace clic en las flechas de

desplazamiento o cuando se arrastra el cuadro de desplazamiento. Las propiedades de este

control son las siguientes: Valor actual (posición relativa del cuadro de desplazamiento dentro

de la barra de desplazamiento), Valor mínimo (posición del cuadro de desplazamiento más

próxima a la parte superior de una barra de desplazamiento vertical o al extremo izquierdo de

una barra de desplazamiento horizontal), Valor máximo (Posición del cuadro de

desplazamiento más lejana a la parte superior de una barra de desplazamiento vertical o al

extremo derecho de una barra de desplazamiento horizontal), incremento (tamaño del espacio

que se desplazará el cuadro de desplazamiento cuando se haga clic en la flecha situada en

cualquier extremo de la barra de desplazamiento), cambio de página (tamaño del espacio que

se desplazará el cuadro de desplazamiento cuando se haga clic entre el cuadro de


Excel-Visual Basic Ing. Ronald Chambi Inca.

desplazamiento y una de las flechas de desplazamiento) y vincular con la celda (celda en la que

se devuelve la posición actual del cuadro de desplazamiento).

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

procedimiento. Estos tipos de procedimientos no se crean automáticamente, por eso también

reciben el nombre de procedimiento o funciones definidos por el usuario.

Un procedimiento general puede escribirse como procedimiento SUB o como función

FUNCTION. Un procedimiento conducido por un evento siempre es un procedimiento SUB.

Según el lugar de la aplicación donde los podemos llamar, los procedimientos generales

pueden ser:

1. Procedimientos a nivel formulario.

2. Procedimientos a nivel modulo.

Procedimientos a nivel de formulario

Los procedimientos a nivel de formulario son aquellos que se pueden llamar o ejecutar solo

desde el formulario en el cual han sido creados.

Procedimientos a nivel de modulo

Los procedimientos a nivel modulo son procedimientos públicos; es decir, se pueden llamar o

ejecutar desde cualquier formulario de la aplicación.

Un procedimiento tiene las siguientes partes:

Private Indica que se puede tener acceso al procedimiento solo desde los

procedimientos del formulario donde se ha declarado o

creado(Procedimiento a nivel de formulario)

Public Indica que se pude tener acceso al procedimiento desde todos los

procedimientos de cualquier formulario que forma parte de la aplicación


Excel-Visual Basic Ing. Ronald Chambi Inca.

(procedimiento a nivel de modulo).

Static Indica que se conservan los valores de las variables locales del

procedimiento entre una llamada al procedimiento y otra.

El atributo Static no afecta a las variables declaradas fuera de Sub, ni

siquiera cuando se usa en el procedimiento.

Constantes

Es un elemento con un nombre determinado que mantiene un valor constante durante el

desarrollo de todo el programa el cual no se puede cambiar. Las constantes se definen con la

instrucción CONST. Por ejemplo:

Const saludo = “Buenos dias”

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

siguiente instrucción muestra el texto Buenos días.

La siguiente instrucción define la constante IGV con el valor 18.

Const IGV = 18

Si durante el desarrollo del programa escribimos por ejemplo IGV = 16 para cambiar el valor a

la constante IGV, se visualiza un mensaje de error.


Excel-Visual Basic Ing. Ronald Chambi Inca.

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

ejecución de la aplicación. Una variable, según el lugar de la aplicación donde se desea

utilizarla puede ser:

1.- Variables a nivel de procedimiento.

Si una variable se declara a nivel de procedimiento, significa que conserva su valor en cualquier

procedimiento dono ha sido declarado.

2.-variables a nivel de formulario.

Si una variable se declara a nivel de formulario, significa que conserva su valor en cualquier

procedimiento del formulario donde ha sido declarada.

3.- Variables a nivel modulo.

Si un variable se declara a nivel de modulo, significa que conserva su valor en cualquier

procedimiento de cualquier formulario de la aplicación.

La sintaxis básica para declarar una variable es:

Ambito Nombre As Tipo


Excel-Visual Basic Ing. Ronald Chambi Inca.

1 Ámbito

El Ámbito indica en qué lugar de la aplicación dese utilizar la variable y puede ser una de las

siguientes palabas claves: Dim, Static, Private o Public.

Dim Se puede utilizar a nivel de procedimiento y a nivel formulario. Si se declara una

variable a nivel de procedimiento con la palabra DIM, Visual Basic reinicializa la

variable cada vez que se ejecuta el procedimiento.

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

conserva su valor entre una llamada al procedimiento y otra.

Private Se utiliza a nivel de modulo e indica que la variable es privada; es decir, solo va a

ser reconocida dentro del módulo donde ha sido declarada.

Public Se utiliza solo a nivel de modulo e indica que la variable es publica; es decir, va a

ser reconocida en toda la aplicación.

2 Nombre

Es el nombre que utilizamos para referirnos a la variable en la aplicación, el nombre de una

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

reservada porque tienen un significado especial para Visual Basic.

3 Tipo

Es opcional y determina qué clase de valores puede almacenar una variable. Si no indica el tipo

no utilice la palabra A$, en este caso la variable se considera de tipo Variant.


Excel-Visual Basic Ing. Ronald Chambi Inca.

Tipos de Variables

Byte 1 byte 0 a 255

Boolean 2 bytes True o False

Integer 2 bytes -32,768 a 32,767

Long (entero largo) 4 bytes -2,147,483,648 a 2,147,483,647

(coma flotante/ precisión simple) 4 bytes -3,402823E38 a –1,401298E-45 para


Single
valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos

(coma flotante/ precisión doble) 8 bytes -1.79769313486231E308 a

Double -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a

1,79769313486232E308 para valores positivos

Currency (entero a escala) 8 bytes -922.337.203.685.477,5808 a

922.337.203.685.477,5807

14 bytes +/-79.228.162.514.264.337.593.543.950.335 sin punto decimal;

+/-7,9228162514264337593543950335 con 28 posiciones a la derecha del signo


Decimal
decimal; el número más pequeño distinto de cero es

+/-0,0000000000000000000000000001

Date 8 bytes 1 de enero de 100 a 31 de diciembre de 9999

String (longitud variable) 10 bytes + longitud de la cadena Desde 0 a 2.000 millones

(con números) 16 bytes Cualquier valor numérico hasta el intervalo de un tipo


Variant
Double

Operadores Aritméticos

+ Suma \ División Entera

- Resta Mod Resto de una división

* Multiplicación ^ Exponenciación
Excel-Visual Basic Ing. Ronald Chambi Inca.

/ División () Orden de Operación

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

Orden de ejecución de los operadores (Prioridad)

Cuando hay varios operadores en una misma expresión se resuelven en un orden

predeterminado según la prioridad de los operadores. Así:

1 Exponenciación(^)

2 Negación (-)

3 Multiplicación y División (*,/)

4 División de enteros (\)

5 Resto de una división (mod)

6 Suma y Resta (+,-)

Nota:
Excel-Visual Basic Ing. Ronald Chambi Inca.

Si los operadores de una expresión tienen la misma prioridad se ejecutan de izquierda a

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

promedio 19 y la expresión (12+14)/2 dará como promedio 13.

Comentarios

Los comentarios son textos que se pueden utilizar para documentar nuestra aplicación

permitiendo de esta manera ir explicando cómo estamos desarrollando la aplicación y como

funciona. Este texto explicativo y aclaratorio es ignorado por la computadora cuando muestra

aplicación se ejecuta.

Los comentarios se pueden colocar dentro de un programa utilizando la instrucción REM o el

apostrofe (‘).

La instrucción REM normalmente se utiliza al inicio de una línea y en forma independiente.

1.

‘ El valor de a se incrementa en 1

A = A +1

Rem el valor de a se incrementa en 1

A = A +1

Nota: Cuando se insertan los comentarios se visualizan con un color diferente al de las

instrucciones, este color es normalmente el verde.


Excel-Visual Basic Ing. Ronald Chambi Inca.

MSGBOX

Muestra una ventana de mensaje en el centro de la pantalla. Tiene dos Sintaxis

1.- Cuando no se espera la respuesta del usuario.

MsgBox "Mensaje", valor, "Titulo"

2.- Cuando se espera la respuesta del usuario:

Variable = MsgBox("Mensaje", valor, "Titulo")

Variable Almacena un valor tipo entero de acuerdo a la respuesta del usuario.

Mensaje Es el mensaje que desea mostrar.

Valor Indica que botones van a acompañar al mensaje.

Título Es el título que desea que tenga la ventana.

Valor

Valor Constante Botón que se visualiza

0 vbOKOnly Ok(Aceptar)

1 vbOKCancel Ok y Cancelar

2 vbAbortRetryIgnore Anular, Reintentar e Ignorar

3 vbYesNoCancel Si, No y Cancelar

4 vbYesNo Si y no

5 vbRetryCancel Reintentar y Cancelar

16 vbCritical Icono de Error Critico

32 vbQuestion Icono de Interrogación


Excel-Visual Basic Ing. Ronald Chambi Inca.

48 vbExclamation Icono de exclamación

64 vbInformation Icono de información

0 vbDefaultButton1 Primer Botón por defecto

256 vbDefaultButton2 Segundo botón por defecto

512 vbDefaultButton3 Tercer botón por defecto

Iconos que se pueden Mostrar

Icono de Error critico 16

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.

Valores que retorna:

Valor Constante Respuesta del usuario

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

R = MsgBox("Esta seguro de salir", vbInformation + vbYesNo, "Cuidado")

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

No la variable R toma el valor 7.

2.

Dim T As Integer

T = MsgBox("Clave Incorrecta", vbCritical + vbOKCancel, "Acceso Denegado")


Excel-Visual Basic Ing. Ronald Chambi Inca.

Si el usuario hace click en el botón Aceptar, la Variable T toma el valor de 1 y si hace click en el

botón Cancelar la variable T toma el valor de 2.

InputBox

Muestra una caja con un mensaje y permite además que el usuario pueda ingresar un dato el

cual se considera de tipo String. Su sintaxis es:

variable = InputBox(mensaje, titulo, valor_pred, columna, fila)

Variable Es la variable que almacena el valor que se ingresa en la caja.

Mensaje Es el mensaje que desea mostrar cuando se pida el dato a ingresar.

Titulo Es el título de la caja.

Valor Es el valor que se muestra en forma automática para ser ingresado.

predeterminado

Columna Es un valor que indica la posición horizontal del formulario donde se

desea que se muestre la caja.

Fila Es un valor que indica la posición vertical del formulario donde se desea

que se muestre la caja.

Por ejemplo, la siguiente instrucción.

P = InputBox("Ingrese el precio de venta", "Venta de Dólares", 3.35, 2000, 1000)


Excel-Visual Basic Ing. Ronald Chambi Inca.

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:

P = InputBox("Ingrese el precio de venta")

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.

P = InputBox("Ingrese el precio de venta", "Venta de Dólares", , 2000, 1000)

Muestra la siguiente caja de ingreso:


Excel-Visual Basic Ing. Ronald Chambi Inca.

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

automática no la ubicación de la caja en el formulario.

P = InputBox("Ingrese el precio de venta", "Venta de Dólares")

Muestra la misma caja de ingreso anterior e el centro de la pantalla, porque no se indica la

posición:

Si desea escribir el mensaje en varias líneas, utilice Chr(13) (Retorno de carro) 0 Chr(10) o las

dos juntas al final de cada línea.

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

ejecución de un programa. Su sintaxis es:

Variable = Variable + incremento


Excel-Visual Basic Ing. Ronald Chambi Inca.

El incremento normalmente es uno. Por ejemplo: A = A + 1.

Cada vez que la computadora ejecuta esta instrucción, el valor de la variable A se incrementa

en 1.

Un acumulador llamado también sumador es una variable que permite ir almacenado el

contenido que va tomando otra variable. Su sintaxis es:

Variable1 = Variable1 + Variable2

Ejemplo: R = R + F

Cada vez que la computadora ejecuta esta instrucción en la variable R acumula el valor de la

variable F.

Los fundamentos de VBA

Antes de pasar a cosa más importantes, le sugiero que lea todo el material de esta sección

para tener una visión de conjunto de lo que se pretende.

A continuación se presenta un resumen muy esquelético de en qué consiste VBA.

 Código: Las acciones de VBA se realizan ejecutando código VBA. Se escribe (o graba)

código VBA, que se almacena en un módulo VBA.


Excel-Visual Basic Ing. Ronald Chambi Inca.

 Módulos: los módulos VBA están almacenados en un libro de Excel, pero vemos o

editamos modulo utilizando el Editor de Visual Basic. Un módulo VBA consta de

Procedimientos.

 Procedimientos: Un procedimiento es básicamente una unidad de código informático

que realiza alguna acción. VBA admite dos tipos de procedimientos: Sub y Function.

o Sub: Un procedimiento Sub consiste en una serie de sentencias que puede

ejecutarse de varias maneras. Aquí tiene un ejemplo de un procedimiento Sub

llamado Test, que realiza una sencilla suma y después muestra el resultado en

un cuadro de mensaje.

Sub Test()

Dim Sum as Integer

Sum = 1+1

Msgbox “La respuesta es:” & Sum

End sub

o Funtion: Un módulo VBA también puede tener un procedimiento function. Un

procedimiento Function devuelve un solo valor (o posiblemente una matriz).

Se puede invocar una Function desde otro procedimiento de VBA o podemos

usarlo en una fórmula de hoja de cálculo. A continuación se muestra un

ejemplo de una función llamada SumaDosN.

Function SumaDosN(arg1, arg2)

SumaDosN = arg1 + arg2

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,

gráficos o un rectángulo dibujado. Hay muchos más objetos a nuestra disposición y

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

ejemplo, Excel es un objeto llamado Application y contiene otros objetos, como

Workbook puede contener otros objetos como Worksheet y Chart. Un objeto

Worksheet puede contener objetos tales como Range, PivotTable y así sucesivamente.

La disposición de estos objetos recibe el nombre de objeto de Excel.

 Jerarquía de objetos: Cuando se hace referencia a un objeto miembro o contenido, se

especifica su poción en la jerarquía de objetos utilizando un punto para separar los

contenedores de los miembros. Por ejemplo, podemos hacer referencia a un libro

llamado Libro.xlsx así:

Application.Workbooks (“Libro1.xlsx”)

Podemos referirnos a la Hoja1 del Libro1 de esta manera.

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

propiedad es como un valor de un objeto. Por ejemplo, un objeto de rango tiene

propiedades como Value y Address. Podemos utilizar VBA para determinar las

propiedades de un objeto y también para cambiarlas. Algunas son de solo lectura y no

pueden modificarse con VBA. Hacemos referencia a las propiedades combinando el

objeto con la propiedad, separados por un punto. Por ejemplo, podemos referirnos al

valor de la celda A1 de la Hoja1 como se indica a continuación:

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

asignar el valor de la celda A1 de la Hoja A1 de la Hoja1 a una variable llamada

interest, utilice la siguiente instrucción VBA:

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

Trabajar con Objetos Range

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

de celdas de una hoja simple.

 La propiedad Range de una clase de objeto Worksheet o Range.

 La propiedad Cells de un objeto Worksheet.

 La propiedad Offset de un objeto Range

Propiedad Range

La propiedad Range devuelve un objeto Range. Si consultamos la ayuda de la propiedad Range,

veremos que esta propiedad.

La instrucción simplemente introduce un valor en la celda especificada. En este caso, pone un

valor 12.3 en la celda A1 de la Hoja1 del libro activo:

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

El siguiente ejemplo introduce el mismo valor en un rango de 20 celdas de la hoja active. Si la

hoja activa no es una hoja, se produce un mensaje de error:

Worksheets("Hoja1").Range("A1:B10").Value = 2

Worksheets("Hoja1").Range("A1", "B10").Value = 2

Y Finalmente, el siguiente ejemplo introduce el valor 4 a cinco celdas, es decir, un rango no

continuo. La coma sirve como operador de unión:

Range("A1,A3,A5,A7,A9").Value = 4

A continuación tiene un ejemplo sobre como utilizar la propiedad Range en un objeto

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.

Por lo tanto, la siguiente instrucción introduce un valor de 5 en la celda inmediatamente a la

derecha y una fila por debajo de la celda activa:

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

propiedad Range, Podemos utilizar la propiedad Cells en objetos Worksheet y Range.

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

acepta el número indicativo de la fila (entre 1 y 1048576) y el número indicativo de la columna

(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

rango al que se hace referencia. ¿Confuso? Probablemente. Un ejemplo podría ayudar a

acláralo.

La siguiente instrucción introduce el valor 5 en la celda activa. Recuerda, en este caso, que la

celda activa se trata como si fuera la celda A1 de la hoja:

Rem celdas relativas

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.

de las celdas en el objeto Range. En el siguiente ejemplo, se introduce un valor de 2000 en la

celda A2 es la quinta celda (contando desde la parte superior derecha hacia abajo) en el rango

al que se hace referencia:

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

objeto Range y a ninguna otra clase.

La propiedad Offset admite dos argumentos que se corresponden a la posición relativa de la

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

introduce el valor 12 en la celda inmediatamente debajo de la celda activa:

ActiveCell.Offset(1, 0).Value = 12

Empezamos con el indicador de celda en la celda B1, introduciremos valores en B1:B3 y

después volvemos a B1.

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.

Observe que la propiedad FormulaR1C1. Normalmente conviene utilizar la propiedad Valué

para introducir un valor en una celda. Sin embargo, utilizar FormulaR1C1 o incluso Formula

producirá e mismo resultado.

Puede eliminar todas las referencias a Range(“A1”) y la macro seguirá funcionando

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

Trabajar con Rangos

Los ejemplos de esta sección muestran como manipular rangos de hojas con VBA,

concretamente, veremos ejemplos de copia, traslado y selección de un rango, identificación de

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

otras muchas operaciones habituales relacionadas con los rangos.

Copiar un rango

Por ejemplo, si grabamos una sencilla operación de copiar y pegar, la grabadora generara cinco

líneas de código VBA.

Range("A1").Select

Selection.Copy

Range("B1").Select

ActiveSheet.Paste

' Salir del modo de copiado

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

argumento que representa el destino del rango copiado:

Range("A1").Copy Range("B1")

Otro modo de realizar esta tarea es utilizar variables de objetos para representar los rango,

como muestra el siguiente ejemplo:

Dim rng1, rng2 As Range

Set rng1 = Range("A1")


Excel-Visual Basic Ing. Ronald Chambi Inca.

Set rng2 = Range("B1")

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

funciona igual que cuando se copia y pega un rango manualmente en Excel.

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")

Copiar un rango serie de tamaño variable

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

añadiremos nuevos datos.

Como no sabemos la dirección exacta del rango en todo momento, escribir una macro para

copiar la distribución requerirá código adicional.


Excel-Visual Basic Ing. Ronald Chambi Inca.

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")

Seleccionar o identificar de otra manera varios tipos de rangos

Gran parte del trabajo que realizamos en VBA implica trabajar con rangos (seleccionándolos o

identificándolos para que podamos hacer algo con las celdas).

Además la propiedad CurrentRegion (comentada anteriormente), debemos tener en cuenta el

método End del objeto Range. El método end toma un argumento que determina la dirección

en que se expande la selección. La siguiente instrucción selecciona un rango a partir de la celda

activa hasta la última celda que no esté vacía:

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

Rem se tiene otras direcciones como: xlUp, xlToLeft y xlToRight

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.

Introducir un valor en la siguiente celda vacía

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

la siguiente fila vacía.

Dim sig_fila As Long

Dim nombre, cantidad As String

'Se ubica en la ultima fila -> Cells(Rows.Count, 1)

sig_fila = Cells(Rows.Count, 1).End(xlUp).Row + 1

nombre = InputBox("Ingresa Nombre")

cantidad = InputBox("Ingresa Cantidad")

Cells(sig_fila, 1) = nombre

Cells(sig_fila, 2) = cantidad

Observe que la declaración determina el valor de la variable sig_fila. Si no entiende cómo

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

forma el procedimiento también funcionara en versiones anteriores de Excel.

Contar las celdas seleccionadas

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

selección de un rango. Por ejemplo, la siguiente instrucción muestra un cuadro de mensaje

que contiene el número de celdas de la actual selección:

MsgBox Selection.Count

Si la hoja activa contiene un rango llamado Datos, la siguiente instrucción asignara el número

de celdas de dicho rango a un variable llamada CellCount:

Num_cell = Range("Datos").Count

Fundamentos de programación VBA

Potrebbero piacerti anche