Sei sulla pagina 1di 13

Anlisis de Datos Avanzados

Creacin de Funciones VBA


Ejemplo:

Supongamos que se desea crear la siguiente funcin en VBA


n
Cuadrados( x, n) x 2
i 0

Tenemos as:

Function Cuadrados(x,n)
Dim Contador as Integer, Acumulador as Single
Acumulador = 0
For Contador = 0 to n
Acumulador = Acumulador + x^2
Next
Cuadrados = Acumulador
End Function

UANL 2017
Anlisis de Datos Avanzados

Creacin de Funciones VBA


Otras maneras de definir la funcin anterior son las siguientes:

Function Cuadrados(ByRef x, ByRef n)


Dim Contador as Integer, Acumulador as Single
Acumulador = 0
For Contador = 0 to n
Acumulador = Acumulador + x^2
Next
Cuadrados = Acumulador
End Function

Function Cuadrados(ByRef x as Single, ByRef n As Integer) As Double


Dim Contador as Integer, Acumulador as Single
Acumulador = 0
For Contador = 0 to n
Acumulador = Acumulador + x^2
Next
Cuadrados = Acumulador
End Function

UANL 2017
Anlisis de Datos Avanzados

Creacin de Funciones VBA

Ejemplo:

Function Aleatorio()
Aleatorio = Rnd
End Function

Qu diferencia tiene vs. la siguiente funcin?

Function AleatorioDinamico()
Application.Volatile True
AleatorioDinamico = Rnd
End Function Reclculo
automtico

UANL 2017
Anlisis de Datos Avanzados

Creacin de Funciones VBA

En lo que a funciones de la hoja de clculo se referiere, Excel ofrece la


siguiente manera directa de invocarlas:

Application.WorksheetFunction."Funcion"

Nombre de la funcin elegida

Por ejemplo:

Sub PruebaFuncin ()
MsgBox Application.WorksheetFunction.Ln(2)
End Function

UANL 2017
Anlisis de Datos Avanzados

Proyecto:
Crear la funcin SIMPSONCOMP en Excel VBA de manera que sta al ser
invocada desde la hoja de clculo sea capaz de obtener la
aproximacin de la integral siguiente:

x2
1 b

2 a
e 2
dx Te es familiar la funcin?

Lo anterior dados los lmites de integracin a y b, as como la


precisin requerida por el usuario en base al Mtodo de Integracin
Compuesta de Simpson

SIMPSONCOMP(a,b,p)

Precisin
(Por ejemplo: 0.001)

UANL 2017
Anlisis de Datos Avanzados
Transferencia de Variables en Subrutinas
Tipo de transferencia en Subrutinas:
* Transferencia por Referencia
Las variables son llamadas por la subrutina, y sta ltima puede cambiar su valor
una vez que termina su ejecucin.
* Transferencia por Valor
Slo el valor de las variables es llamado por la subrutina sin afectar su valor
final una vez que termina la ejecucin

Sub PasaVariables()
Dim Nombre1 as String, Nombre2 as String
Nombre1 = "Alberto"
Nombre2 = "Juan"
CambiaNombres Nombre1, Nombre2
MsgBox Nombre1 & ", " & Nombre2
End Sub o simplemente: Nombre1

Sub CambiaNombres(ByRef Nombre1, ByVal Nombre2)


Nombre1 = Nombre1 & " Jimnez"
Nombre2 = Nombre2 & " Martnez"
MsgBox Nombre1 & ", " & Nombre2
End Sub
UANL 2017
Anlisis de Datos Avanzados

La Grabadora de Macros
Grabacin Relativa o Absoluta?

Botn para detener grabacin

UANL 2017
Anlisis de Datos Avanzados

La Grabadora de Macros
Para ejecutar la macro creada:

Revisa qu pasa cuando este botn se presiona mientras corre la


grabacin y compara los resultados al momento de correrla

UANL 2017
Anlisis de Datos Avanzados

El uso de Arreglos ("Arrays")


Tipos de declaracin:

Dim Empleados(100) as String 0, 1, 2 ... 99


Checar: Option Base 1
Dim Empleados(1 To 100) as String 1, 2, 3 ... 100

Cambio de Dimensin del


Redim Empleados(200) arreglo (borrando conte-
nido previo)

Redim Preserve Empleados(200) Cambio de Dimensin del


arreglo (sin borrar el con-
tenido previo)
Arreglo con dimensin
Dim Empleados(10,100)
mltiple (de dos ndices)

UANL 2017
Anlisis de Datos Avanzados

El uso de Arreglos ("Arrays")


Ejemplo:
Sub ArregloEmpleados3()
Dim Empleados() As String, Contador As Integer, Cadena As String
Dim Elemento as Variant
Nempleados = InputBox("Cuntos empleados tiene la compaa?")
ReDim Empleados(1 To Nempleados)
For Contador = 1 To Nempleados
Empleados(Contador) = InputBox("Empleado No. " & Contador, _
"Captura de Nombres de Empleados")
Next
Cadena = ""
ReDim Preserve Empleados(1 To Nempleados + 1)
Empleados(Nempleados + 1) = "Jefe"

For Each Elemento In Empleados


Cadena = Cadena & " " & Elemento
Next
MsgBox Cadena
End Sub

UANL 2017
Anlisis de Datos Avanzados

El uso de Arreglos ("Arrays")


Ejemplo:
Option Base 1 Antes de cualquier subrutina

Sub FuncionArreglo()
Dim Dias as Variant
Dias = Array("Lunes", "Martes", "Mircoles", "Jueves", "Viernes")
MsgBox "El primer da en el arreglo es " & Dias(1)
End Sub

UANL 2017
Anlisis de Datos Avanzados

El uso de Arreglos ("Arrays")


Proyecto:
Mediante el uso de Arreglos elabore una
macro capaz de determinar el precio
unitario de aquel cdigo que el usuario
escoja. Lo anterior deber ser efectuado
mediante varias subrutinas que cumplan
tareas especficas en este proceso, a
manera de que una de ellas ejecute a las
dems. Asimismo, la base de datos deber
estar localizada en un archivo externo que
deber ser abierto una sola vez (al
principio del programa).

UANL 2017
Anlisis de Datos Avanzados

El uso de Arreglos ("Arrays")


Estructura del programa:
Sub Principal()
AsignaValores ' Subrutina que crea el arreglo
Continua = True
While Continua
Busqueda CodigoReq, NProducts ' Subrutina de bsqueda de cdigo
Mensaje CodigoReq, PrecioReq, Continua ' Subrutina que despliega resultado
Wend
End Sub

UANL 2017

Potrebbero piacerti anche