TIPOS DE DATOS EN VISUAL BASIC PARA EXCEL Tipos de datos

Anuncio
TIPOS DE DATOS EN VISUAL BASIC PARA EXCEL
Tipos de datos
El tipo de un dato, es el conjunto de valores que son asignados en un programa.
Si se intenta dar un valor fuera del conjunto, se producirá un error.
La asignación de tipos a los datos tiene dos objetivos principales:
- Detectar errores en las operaciones
- Determinar cómo ejecutar estas operaciones
1
Los tipos de datos simples, más básicos son:
- Integer (entero),
- Boolean,
- String,
Integer
El tipo de datos Integer es un tipo simple, y dentro de estos, es ordinal.
Al declarar una variable de tipo Integer, se está creando una variable numérica que puede tomar valores
positivos o negativos, y sin parte decimal.
Boolean (lógico)
El tipo de datos Boolean es el que te permite usar variables que disponen sólo de dos posibles valores:
cierto o falso. Debido a esto, su utilidad salta a la vista, y no es otra que variables de chequeo.
Nos sirven para mantener el estado de un objeto mediante dos valores:
- si/no
- cierto/falso
- funciona/no funciona
- on/off , etc.
String (carácter y cadena)
Las cadenas de caracteres (Strings), se puede contener en una sola variable. Por ejemplo, “Casa”.
Conversión de Tipos de datos
Son funciones, como su nombre lo indica, que convierten datos de un tipo a otro:
- de String a Integer,
- de Integer a String,
- de Date a String,...
Ejemplo 7A
El siguiente procedimiento nos pide ingresar dos números.
Ingresamos los números 40 y 60. Estos se mantienen por medio de las variables en una parte de la
memoria, se suman, y finalmente se guardan en la casilla A1 de la hoja activa, con el valor de 100.
Option Explicit
Sub Sumar()
Dim Numero1 As Integer
Dim Numero2 As Integer
Numero1 = InputBox("Entrar el primer valor", "Entrada de datos")
Numero2 = InputBox("Entrar el primer valor", "Entrada de datos")
ActiveSheet.Range("A1").Value = Numero1 + Numero2
End Sub
Volvamos a ejecutar el procedimiento, y cuando se pida el primer valor pongamos "Casa".
Observamos que nos aparece una ventana indicando el siguiente error:
Se ha producido el error 13 en tiempo de ejecución:
No coinciden los tipos
2
Esto quiere decir que el procedimiento se detiene, debido a un error en el tipo de datos.
La función InputBox siempre devuelve datos tipo String.
El tipo de datos String es uno de los tipos más utilizados por los programadores.
Como he visto, un String es una secuencia o cadena de caracteres, como por ejemplo "Casa", "Física"
Cuando se ingresaron caracteres numéricos, no hubo ningún problema, ya que estos pueden asignarse a
variables tipo Integer, porque Visual Basic hace automáticamente la conversión.
Pero cuando entramos texto e intentamos asignarlo a una variable Integer, Visual Basic muestra un error,
indicando que la variable no es adecuada para los datos que se desean guardar.
Ejemplo 7B
Ahora repitamos el mismo ejemplo, pero cambiemos el tipo de dato por String.
Ejecutamos el procedimiento, he ingresamos los valores 40 y 60, y el resultado nos permitirá comprender
mejor este tema de los tipos de datos.
Option Explicit
Sub Sumar()
Dim Numero1 As String
Dim Numero2 As String
Numero1 = InputBox("Entrar el primer valor", "Entrada de datos")
Numero2 = InputBox("Entrar el primer valor", "Entrada de datos")
ActiveSheet.Range("A1").Value = Numero1 + Numero2
End Sub
Funciones de Conversión de Tipo
Las funciones de conversión de tipo, nos permiten solucionar problemas de esta clase.
Val(Cadena). Convierte la cadena a un valor numérico
La función Val(Dato String), convierte una cadena de caracteres a valor numérico.
Si la cadena a convertir contiene algún carácter no numérico devuelve 0.
Así, si al pedir un valor se teclea "Casa", la función Val, devolverá un cero.
.
Str(Número). Convierte el número a una expresión cadena.
Las siguientes funciones tienen la forma Función(Expresión).
3
Ejemplo 7C
En el siguiente ejemplo, cuando nos pida el primer valor, ingresemos: “Casa”, y luego el número: 40.
Como dijimos, en este caso no dará error. La cadena de caracteres String: “Casa”, devolverá cero, que
sumado a 40, nos dará como resultado: 40.
Option Explicit
Sub Sumar()
Dim Numero1 As Integer
Dim Numero2 As Integer
Numero1 = Val(InputBox("Entrar el primer valor", "Entrada de datos"))
Numero2 = Val(InputBox("Entrar el primer valor", "Entrada de datos"))
ActiveSheet.Range("A1").Value = Numero1 + Numero2
End Sub
De igual manera, si cambiamos el tipo de dato de Integer a String, también obtendremos los mismos
resultados. Probemos con el procedimiento siguiente, e ingresemos “Casa” y luego 40.
Option Explicit
Sub Sumar()
Dim Numero1 As String
Dim Numero2 As String
Numero1 = Val(InputBox("Entrar el primer valor", "Entrada de datos"))
Numero2 = Val(InputBox("Entrar el primer valor", "Entrada de datos"))
ActiveSheet.Range("A1").Value = Numero1 + Numero2
End Sub
OBJETOS Y PROPIEDADES QUE SE UTILIZAN HABITUALMENTE
Objeto Cells(fila, columna).
Se usa como objeto range, para referenciar una casilla o rango de casillas.
Es una alternativa a utilizar la referencia de la forma A1, B1, X320.
Utiliza la fila y la columna que ocupa la casilla dentro de la hoja (o objeto WorkSheet).
Ejemplo 8
Para poner “Casa” en la casilla A1 de la hoja activa seria:
8.1.- ActiveSheet.Cells(1,1).Value=“Casa”
Utilizar Cells para referenciar un rango.
Es equivalente a cuando usamos Range("Casilla_Inicial:Casilla_Final").
La forma que se obtiene utilizando Cells es un poco más larga, pero a veces resulta más funcional que
utilizando únicamente Range.
8.2.- El Rango A1:B8 será equivalente a: Range(Cells(1, 1), Cells(8, 2)).Value = "Casa"
Otra forma interesante de Cells es cuando lo usamos de la siguiente forma:
8.3. - Range("A5:B10").Cells(5, 2).Value = "Casa"
El resultado del valor "Casa", lo pondrá en la celda B9.
Analicemos en este ejemplo:
Cells comienza a contar columnas y filas a partir del rango especificado en el objeto Range.
4
VARIABLES DE OBJETOS
Una variable objeto sirve para hacer referencia a un objeto, esto significa que podremos acceder a las
propiedades de un objeto e invocar a sus métodos a través de la variable, en lugar de hacerlo directamente
a través del objeto.
Posiblemente no se utilice demasiado esta clase de variables, pero hay casos en los que no hay más
remedio que utilizarlas, por ejemplo en estructuras For Each ... Next como veremos, o cuando sea
necesario construir funciones que devuelvan rangos, referencias a hojas, etc.
Para declarar una variable objeto se utiliza también la palabra Dim de la forma siguiente:
Dim Var_Objeto As Objeto
Por Ejemplo:
Dim R As Range
Dim Hoja As WorkSheet
Para asignar un objeto a una variable debe utilizar la instrucción Set.
Set Variable_Objeto = Objeto
Por Ejemplo
Dim HName As Object
Set HName = Hoja5
********************************************
Set R= ActiveSheet.Range("A1:B10")
Set Hoja = ActiveSheet
Set Hoja = WorkSheets(1)
Ejemplo 9
Este ejemplo nos va a enseñar a entender, como utilizar este tipo de variables.
Se pide llenar el Rango de A1 a C13 con la palabra "Casa", y después poner negrita.
Asignamos una variable objeto al objeto, y luego trabajamos con esa variable de la misma forma que se
trabajaría directamente sobre el objeto.
Option Explicit
Sub obj()
Dim K As Range
Set K = ActiveSheet.Range("A1:C13")
K.Value = "Casa"
K.Font.Bold = True
End Sub
5
BUSCAR OBJETIVO / GOAL SEEK (CON VBA)
El Buscar Objetivo tradicional que utilizamos a través del Menú Herramientas, nos permite utilizar este
utilitario, de manera individual, para cada cálculo que queramos realizar.
Sin embargo, suelen presentarse casos en que debemos realizar este tipo de cálculos que nos ofrece el
Buscar Objetivo de modo masivo, para un grupo de datos que podamos tener en una matriz. En estos
casos, utilizamos mediante programación VBA la funcionalidad de esta herramienta.
Ejemplo 10
Nuestros datos pueden tener una estructura similar a esta, a la cual le adicionamos un comando (Botón),
que nos permita ejecutar la macro del Buscar Objetivo.
Estructura de Fórmulas
Tasa 7%
Condiciones 60 días
Margen Bruto (fondo verde)
Costo
GlsxEnv
Costo Financ.
Precio
Margen Bruto (fondo amarillo)
Es un valor fijo. No es resultado de una fórmula.
Si está relacionada con la estructura de costos.
Es un valor fijo. No es resultado de una fórmula.
Si está relacionada con la estructura de costos.
Es una columna donde tenemos nuestro margen objetivo.
No está relacionada con la estructura de costos.
Es un valor fijo. No es resultado de una fórmula.
Si está relacionada con la estructura de costos.
Es un valor fijo. No es resultado de una fórmula.
Indica la cantidad de galones por unidad de envase.
Si está relacionada con la estructura de costos.
Es resultado de una fórmula.
Fórmula de la celda E7
=C7*($A$2*$A$3/360)
Es un valor fijo. No es resultado de una fórmula.
Modificando el Precio, cambia el Margen Bruto.
Si está relacionada con la estructura de costos.
Es resultado de una fórmula.
Indica el Margen Bruto por barril.
1 barril equivale a 42 galones.
Fórmula de la celda G7
=((F7-(C7+E7))/D7)*42
6
Para que la Macro funcione, utilizaremos el siguiente algoritmo:
Option Explicit
Private Sub cmd_ejecuta_Click()
Dim i As Integer
i=7
While Worksheets("Example1").Range("b" & i).Value <> ""
Range("g" & i).Activate
ActiveCell.GoalSeek Goal:=Worksheets("Example1").Range("b" & i).Value, _
ChangingCell:=ActiveCell.Offset(0, -1).Range("A1")
i=i+1
Wend
Range("A7").Select
End Sub
Es necesario también, tomar en cuenta los siguientes puntos:
1.- La hoja de cálculo (Worksheet) tenga el nombre de: Example1
2.- Poner en la hoja de cálculo un comando (botón) que tenga el nombre de: cmd_ejecuta
Interpretación/lectura del algoritmo
1.- Utilizamos Option Explicit, para forzar el uso de variables.
2.- El procedimiento indica que es una consulta privada.
3.- La consulta se inicia cuando se da Click en el comando: cmd_ejecuta
4.- Asignamos a la variable i un tipo Integer.
5.- Asignamos a la variable i el valor de 7.
6.- Se considera 7, porque los datos se encuentran en la fila 7.
7.- Utilizamos el bucle While (cuando inicia)
8.- Indicamos que el bucle operará mientras que las celdas tengan algún contenido.
9.- Cuando ponemos Range("b" & i).Value, i toma el valor de 7.
10.- Entonces el bucle está empezando en la celda B7
11.- La columna B, será nuestra referencia, que establecerá hasta que fila el bucle operará.
12.- Luego la celda G7 se activa.
13.- Indicamos que aquella celda activa será nuestra celda Gol, donde queremos el resultado esperado.
14.- También decimos que el resultado que queremos para aquella celda, se encuentra en la celda B7.
15.- Y para que este cambio se realice, calculará automáticamente el valor de la celda F7.
16.- Para definir que la celda que cambia es la F7, se utiliza ChangingCell:=ActiveCell.Offset(0, -1)
17.- ActiveCell.Offset(0,-1) parte desde el punto que el foco en la celda activa es la G7.
18.- Luego interpreta que de la celda activa no tiene movimiento vertical, por el valor 0.
19.- Y se mueve hacia la izquierda una celda, por el valor -1.
20.- Finalmente la nueva ubicación del foco es la celda F7.
21.- Que es donde cambia el valor, y consecuentemente, modifica el margen bruto esperado (celda G7).
22.- i = i + 1, indica que, mientras no encuentra celda vacía, el bucle se inicia con un valor, de 7 a 8.
23.- Se inicia nuevamente el ciclo.
24.- El ciclo finaliza con el Wend.
25.- El procedimiento pre-finaliza localizando el foco en la celda A7.
26.- Con End Sub finaliza el procedimiento.
7
8
Descargar