Programación Excel VBA
Programación Excel VBA
1
VBA
2
La razón más frecuente por la cuál se
usa VBA en Excel es para automatizar
tareas repetitivas
3
Ejemplos
4
Las tareas pueden automatizarse usando VBA para
escribir las instrucciones explícitas que Excel debe
seguir
5
Nuevas funcionalidades
6
• Jerarquía de objetos Excel VBA
• Objeto Range
• Declaración de variables Excel VBA
• Tipos de datos
• Diferencia entre propiedad y método de un objeto
7
Objetos
8
VBA Objects
Fuente: https://www.automateexcel.com/vba/objects/
9
Mapa
Fuente: https://powerspreadsheets.com/excel-vba-object-model/
10
Propiedades y métodos
11
El objeto Range
12
Propiedades Range
13
Ejemplo
15
• http://www.excel-easy.com/vba.html
• https://msdn.microsoft.com/es-mx/vba/vba-excel
• https://msdn.microsoft.com/vba/vba-language-reference
16
Conceptos en programación para ingeniería
1. Variables
2. Tipos de datos y tamaño
3. Entrada y salida de datos
4. Expresiones aritméticas
5. Procedimientos/Funciones
6. Control de flujo
1. Secuencial
2. Condicional
3. De repetición
17
1 Variables
18
•DIM vs Variant
•Option Explicit
19
Tipo Rango
Byte 0 - 255
LongLong
LongPtr
Single -3.402823E38 to -1.401298E-45 for negative values;
(single-precision floating-point 1.401298E-45 to 3.402823E38 for positive values
Double -1.79769313486231E308 to
-4.94065645841247E-324 for negative values;
4.94065645841247E-324 to 1.79769313486232E308
for positive values
20
Tipo Rango
Currency -922,337,203,685,477.5808 to
922,337,203,685,477.5807
Date January 1, 100 to December 31, 9999
21
Currency
22
Propiedad NumberFormat
• Worksheets("Sheet1").Rows(1).NumberFormat = "hh:mm:ss"
• Columns("C"). NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
23
Ejemplos para Currency
https://www.experts-exchange.com/questions/28324211/Set-number-format-to-euro-using-vba.html
24
String
https://www.example-code.com/vb/fixedLength.asp
25
4. Expresiones aritméticas
26
Operadores aritméticos
• Asume que la variable a= 5, y variable b = 10
Dim a, b as Integer
a=5 Operador Descripción Ejemplo Resultado
https://www.tutorialspoint.com/vba/vba_arithmetic_operators.htm
27
• Operación módulo
• http://www.excel-easy.com/vba.html
28
5. Procedimientos/Funciones
29
Sub
30
Invocar
• Call MiProcedimiento()
31
Function y Sub
32
Function
33
Built-in functions
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/functions/string-functions
34
6. Control de flujo
35
Operadores relacionales/comparación
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/comparison-operators
36
AND
38
Not
Valor 1 Resultado
True False
False True
Dim a As Integer
a = 10
Dim b As Integer
b=0
If Not (a <> 0 Or b <> 0) Then
39
https://www.tutorialspoint.com/vba/vba_logical_operators.htm
40
Sentencia if
verdadero
condición
falso sentencias
41
Sentencia if - else
La sentencia if – else permite decidir entre ejecutar una instrucción (o un
bloque de instrucciones) y otra instrucción (o un bloque de instrucciones)
Sintaxis
If condición Then
Instrucción o bloque
Else
Instrucción o bloque
End If
falso verdadero
condición
sentencias sentencias
42
Operador lógico AND (&&)
43
If
44
Select /Case
Fuente: https://www.excel-easy.com/vba/examples/select-case.html
45
Select-case
46
Sintaxis
47
Ciclos
https://www.programiz.com/c-programming/c-do-while-loops
48
Motivación
• Dim n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,
n17,n18,n19,n20, suma as Integer;
49
Estructuras de repetición
50
Estructura de repetición for
51
52
For
53
Doble ciclo
54
Triple ciclo
55
Por otro lado, el bucle for es ideal usarlo cuando, de
antemano, ya se sabe el número de veces (iteraciones) que
tiene que ejecutarse un determinado bloque de
instrucciones
56
•El bucle for es una variante del bucle while y, al
igual que éste, puede iterar cero o más veces. Sin
embargo, el bucle for sólo se suele usar cuando
se conoce el número exacto de veces que tiene
que iterar el bucle.
57
Ciclo while
• La sentencia while permite repetir un bloque de
instrucciones
• La sintaxis del ciclo while es:
while(condición)
sentencia o bloque;
• Si la condición se cumple se ejecutan las
sentencias del bloque y se regresa el flujo de
control a evaluar nuevamente la condición. El
proceso se repite hasta que la condición sea
falsa
verdadero
• El ciclo puede ejecutarse 0 veces si la condición
no se cumple al entrar en él condición sentencias
falso
58
While vs Do/While
59
While
https://excelyvba.com/bucle-en-vba/
60
Ejemplo While
https://www.excel-easy.com/vba/loop.html#do-while-loop
61
Do/While
https://excelyvba.com/bucle-en-vba/
62
1. Construya macro que lea un número entero N y calcule la suma de
la siguiente serie:
1 2 3 𝑁
1 + 2 + 3 + ⋯+ 𝑁
2. Construya macro que lea un número entero N y calcule el resultado
de la siguiente serie:
• Single, Double
1 1 1 1
1 − + − + ⋯±
2 3 4 𝑁 63
• Construya macro que lea un número entero N y calcule el resultado
de la siguiente serie:
• Single, Double
1 1 1 1
1 − + − + ⋯±
2 3 4 𝑁
64
Do While
65
Do while
http://www.excel-easy.com/vba/loop.html
66
𝑖 𝑥2 𝑥3 𝑥4 𝑥𝑘
𝑘 𝑥
•𝑒 𝑥 = exp 𝑥, 𝑘 = σ𝑖=2 =1+𝑥 + + + …+
𝑖! 2! 3! 4! 𝑘!
67
Crear gráficos
1
2
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/chart-object-excel
https://www.thespreadsheetguru.com/blog/2015/3/1/the-vba-coding-guide-for-excel-charts-graph
http://billietconsulting.com/2013/11/creating-charts-with-vba-in-excel
68
http://billietconsulting.com/2013/11/creating-charts-with-vba-in-excel/
69
SeriesCollection
https://docs.microsoft.com/en-us/office/vba/api/excel.seriescollection
70
Object
https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/early-late-binding/determining-object-type
71
Set
https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/set-statement
72
Set
http://www.homeandlearn.org/the_set_keyword.html
73
Arreglos
74
Arrays en VBA
75
Ejemplos
76
Arreglos de una dimensión
77
Arreglos de dos dimensiones
78
10 Cosas que todo programador debe saber hacer
1. Programar
2. Leer documentación
3. Preguntar y buscar
4. Hacerse entender
5. Hacer tests
6. Disfrutar y curiosear
7. Lectura y comprensión rápida
8. Realizar un control de versiones
9. Seguir formándose
79
Recomendación
https://excelmacromastery.com/excel-vba-array/
http://www.excel-easy.com/
80
Tipos definidos por el usuario
FUENTE: https://www.ibm.com/docs/es/db2/11.1?topic=list-user-defined-types
81
Ordenamiento de burbuja (bubble sort)
Hace múltiples pasadas a lo largo de una lista. Compara los ítems adyacentes e intercambia los que no
están en orden
82
• do
swapped = false
for i = 1 to indexOfLastUnsortedElement-1
if leftElement > rightElement{
swap(leftElement, rightElement)
swapped = true
}
while swapped
https://visualgo.net/bn/sorting
83
Sub BubbleSort(list())
' Sorts an array using bubble sort algorithm
Dim First As Integer, Last As Long
Dim i As Long, j As Long
Dim Temp As Long
First = LBound(list)
Last = UBound(list)
For i = First To Last - 1
For j = i + 1 To Last
If list(i) > list(j) Then
Temp = list(j)
list(j) = list(i)
list(i) = Temp
End If
Next j https://bettersolutions.com/vba/arrays/sorting-bubble-sort.htm
Next i
End Sub
84
Multiplicación de Matrices
85