0% encontró este documento útil (0 votos)
57 vistas85 páginas

Programación Excel VBA

El documento describe cómo Microsoft Excel incluye Visual Basic para Aplicaciones (VBA) que permite automatizar tareas repetitivas a través de macros. VBA proporciona objetos como Range y Cells que representan celdas y rangos de celdas, lo que facilita manipular y analizar datos en Excel de manera programática.

Cargado por

Hachiko Merlín
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
57 vistas85 páginas

Programación Excel VBA

El documento describe cómo Microsoft Excel incluye Visual Basic para Aplicaciones (VBA) que permite automatizar tareas repetitivas a través de macros. VBA proporciona objetos como Range y Cells que representan celdas y rangos de celdas, lo que facilita manipular y analizar datos en Excel de manera programática.

Cargado por

Hachiko Merlín
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 85

Microsoft Excel

• Es una herramienta muy eficaz que se puede usar para


manipular, analizar y presentar datos

• Es posible que se desee encontrar una manera más fácil de


realizar una tarea repetitiva y común, o de realizar alguna tarea
no incluida en la interfaz de usuario

• Las aplicaciones de Office, como Excel, tienen Visual Basic


para Aplicaciones (VBA)

1
VBA

• Lenguaje de programación que brinda la posibilidad de ampliar las


aplicaciones de Office
• Funciona mediante la ejecución de macros. Procedimientos paso a
paso escritos en Visual Basic
• Una pequeña parte de código VBA facilita su trabajo y les brinda la
posibilidad de ejecutar tareas en Office que antes creían imposibles
de realizar

2
La razón más frecuente por la cuál se
usa VBA en Excel es para automatizar
tareas repetitivas

3
Ejemplos

• Suponga que tiene docenas de libros con docenas de hojas de


cálculo y necesita realizar cambios en cada uno de ellos

• Cambios simples como aplicar formato nuevo a algún rango fijo de


celdas

• Tan complejos como buscar algunas características estadísticas de


los datos en cada hoja, y elegir el mejor tipo de gráfico

4
Las tareas pueden automatizarse usando VBA para
escribir las instrucciones explícitas que Excel debe
seguir

5
Nuevas funcionalidades

i. También puede usar VBA para crear nuevas funcionalidades en


Excel

ii. Desarrollar nuevos algoritmos para analizar datos y, a


continuación, usar las funcionalidades de gráficos de Excel para
mostrar los resultados

iii. Tareas que integren Excel con otras aplicaciones

iv. De todas las aplicaciones de Office, Excel es la más usada como


algo similar a una plataforma de desarrollo general

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

• Los objetos de programación se relacionan entre sí


sistemáticamente en una jerarquía denominada modelo de objetos
de la aplicación

• El modelo de objetos básicamente refleja lo que se ve en la interfaz


de usuario

• Por ejemplo, el modelo de objetos de Excel contiene los objetos


Application, Workbook, Sheet y Chart

• Constituye el mapa conceptual de la aplicación y sus funcionalidades

8
VBA Objects

• Excel VBA objects refer to single “entities” made up of code and


data. The Excel application itself is an object, as are workbooks,
worksheets, cell ranges, and shapes. Every object has associated
properties, and methods.

Fuente: https://www.automateexcel.com/vba/objects/
9
Mapa

Fuente: https://powerspreadsheets.com/excel-vba-object-model/
10
Propiedades y métodos

• Es posible manipular objetos al establecer sus Propiedades y llamar


a sus métodos
• Si se establece una propiedad, se producen algunos cambios en la
calidad del objeto
• Si se llama a un método, se logra que el objeto realice una
determinada acción
• Workbook tiene un método Close que cierra el libro y una propiedad
ActiveSheet que representa la hoja activa del libro

11
El objeto Range

• Dentro de la colección de objetos de Excel, Range es casi la unidad


básica con la que podemos trabajar

• Range podemos encontrar un objeto como es Cells (celdas)


• A un conjunto de celdas.
• A una celda en concreto.
• A toda una fila / columna.
• A celdas de otras hojas

12
Propiedades Range

• ActiveCell->representa la primera celda activa de la ventana activa


(windowactive) o especificada
• Cells->representa a una celda o colección de ellas
• Columns->representa las columnas de la hoja activa,o especificada,
o del rango especificado
• Entire column/row->la columna/fila entera dentro del rango

• End->la celda situada al final del rango especificado

• Offset->la celda desplazada según un nº específico de fila/columna

13
Ejemplo

• Una celda sólo:


Range(“A1”).Select
Range(“A1”). Value

• Un conjunto de celdas contiguas dentro de la misma hoja:


Range(“A1:G5”).Select

• Para seleccionar celdas no contiguas:


Range(“A1,A5,B4”).Select

• Para seleccionar celdas no contiguas mas un conjunto contiguo:


Range(“A1,A5,B4:B8”).Select
14
Objeto Cells

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

•Dim NombreVariable As TipoDato

•Option Explicit

19
Tipo Rango

Byte 0 - 255

Boolean True or False

Integer -32,768 to 32,767

Long -2,147,483,648 to 2,147,483,647

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

Object Any Object reference

String 0 to approximately 2 billion


(variable-length)
String 1 to approximately 65,400
(fixed-length)

21
Currency

• Use el tipo de datos Currency para almacenar números en el rango


de -922,337,203,477.5808 (-9.22 E14) a 922,337,203,685,477.5807
(+9.22 E14)
• Debe usar este tipo de datos cuando no desee ningún error de
redondeo. Es útil para cálculos en los que la precisión es
particularmente importante
• La Currency es exacta, Single y Double son redondeadas
• Se almacenan como números de 64 bits (8 bytes) en un formato
entero, escalado por 10.000 para dar un número de punto fijo

22
Propiedad NumberFormat

• Se aplica a objetos DataLabel, DataLabels, PivotField, Style, and


TickLabels, CellFormat y Range
• Devuelve o establece el código de formato para el objeto. Devuelve nulo si
todas las celdas en el rango especificado no tienen el mismo formato
numérico
• [Sintaxis]
• expression.NumberFormat
• expression requerido, es una expresión que devuelve uno de los objetos anteriores
• [Ejemplos]
• Worksheets("Sheet1"). Range("A1").NumberFormat = "General“

• 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

• Los tipos de datos String en VBA son, por su naturaleza,


redimensionables (variable-length).
• Sin embargo, existen casos cuando se necesitan variables String de
una longitud específica(fixed-length)
• [Ejemplos]
• Longitud variable, normal : Dim myVar As String

• Longitud fija de de 20 caracteres: Dim myS As String * 20

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

b = 10 Suma los dos operandos a+b 15


+
- Substrae el segundo operador al primero a-b -5

* Multiplica los dos operadores a*b 50

/ Divide el numerador por el denominador b/a 2

\ Divide el numerador por el denominador con 5\2 2


resultado entero
Mod Operación de modulo. El residuo después de una b Mod 0
división entera a
^ Operador exponencial b^a 100000

https://www.tutorialspoint.com/vba/vba_arithmetic_operators.htm
27
• Operación módulo

• Procedimientos/Subrutina y funciones en Excel VBA

• http://www.excel-easy.com/vba.html

28
5. Procedimientos/Funciones

29
Sub

• Un procedimiento Sub es una parte de programa que realiza una o


más tareas relacionadas, tiene su propio nombre, se escribe como
una parte separada del programa. El tipo más simple de
procedimiento Sub tiene la siguiente forma

30
Invocar

• Un procedimiento Sub se invoca con la instrucción del tipo Call

• Call MiProcedimiento()

31
Function y Sub

• La diferencia entre un Function y un Sub en Excel VBA es que una


Function puede devolver un valor mientras que un Sub no puede.
Function y Sub se vuelven muy útiles a medida que aumenta el
tamaño del programa.

32
Function

• Si desea que Excel VBA realice una tarea que devuelva un


resultado, puede utilizar un Function. Coloque una función en un
módulo (En el Editor de Visual Basic, haga clic en Insertar, Módulo).
Por ejemplo, la función con el nombre Área.

33
Built-in functions

• Numericas en librería Math


• Sqr
• Int
• Round
• …
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/functions/math-functions

• Texto en librería Strings


• Len
• InStr
• Trim
• …

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/functions/string-functions

34
6. Control de flujo

35
Operadores relacionales/comparación

Operador Nombre Ejemplo Significado

< menor que a<b a es menor que b

<= menor que o igual a a <= b a es menor que o igual a b

> mayor que a>b a es mayor que b

>= mayor que o igual a a >= b a es mayor que o igual a b

= igual a a=b a es igual a b

<> no igual a a <> b a no es igual a b

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/comparison-operators

36
AND

Valor 1 Valor 2 Resultado


True True True
True False False
False True False
False False False
Dim a As Integer
a = 10
Dim b As Integer
b=0
If a <> 0 And b <> 0 Then
37
OR

Valor 1 Valor 2 Resultado


True True True
True False True
False True True
False False False
Dim a As Integer
a = 10
Dim b As Integer
b=0
If a <> 0 Or b <> 0 Then

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

• La sentencia if permite decidir ejecutar o no una instrucción o un bloque de


instrucciones.
If condición Then
Instrucción o bloque
End If
• Un bloque es una secuencia de instrucciones
• La condición esta formada por una expresión booleana.

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 (&&)

Edad > 18 Es mexicano Resultado


V V V
V F F
F V F
F F F

43
If

44
Select /Case

Fuente: https://www.excel-easy.com/vba/examples/select-case.html
45
Select-case

• La estructura if-else proporciona únicamente dos opciones


basado en valor booleano

• Por otro lado, la estructura Select-case permite elegir entre


múltiples opciones

• Útil para en situación en que el flujo del programa puede


depender de diversas opciones para continuar por un camino u
otro

• Alternativa al uso de múltiples IFs

46
Sintaxis

Select Case mi_expresion


Case mi_expresion_1
'código para expresion_1
Case mi_expresion_2
'código para expresion_2
'...
Case mi_expresion_n
'código para expresion_n
Case Else
'código para cuando no hay coincidencias
End Select

47
Ciclos

https://www.programiz.com/c-programming/c-do-while-loops

48
Motivación

• Suponga que se desea sumar una lista de 20 números y obtener el


promedio. Sin estructuras de repetición habría que escribir 20
sentencias de entrada. Algo como:

• Dim n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,
n17,n18,n19,n20, suma as Integer;

• suma = n1 + n2 + n3 + n4 + n5 + n6 + n7 + n8 + n9 + n10 + n11 +


n12 + n13 + n14 + n15 + n16 + n17 + n18 + n19 + n20;

49
Estructuras de repetición

• Sin embargo si el número de valores que se deben sumar es


diferente, habrá que modificar cualquiera de ellos para obtener una
solución adecuada.
• Además si el número de valores a sumar es muy grande, programa
se hace prohibitivamente grande.
• Por lo anterior vemos que debe existir otra alternativa para resolver
este tipo de problemas.
• La solución nos la dan las estructuras de repetición.

50
Estructura de repetición for

• Si necesitamos repetir un grupo de acciones un número conocido de


veces la mejor opción es la sentencia repetitiva for()
• Es una de las sentencias repetitivas más usadas en los lenguajes de
programación, esta sentencia inicializa una variable, evalúa una
condición y luego realiza una operación sobre una variable.

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

• Una colección de todos los objetos de tipo Series en el gráfico o


grupo de gráficos especificado

• Use el método SeriesCollection de la propiedad Chart para


devolver la colección SeriesCollection

https://docs.microsoft.com/en-us/office/vba/api/excel.seriescollection
70
Object

• Generic object variables (that is, variables you declare as Object)


can hold objects from any class.

https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/early-late-binding/determining-object-type

71
Set

• Assigns an object reference to a variable or property.


• Syntax
• Set objectvar = {[ New ] objectexpression |Nothing }
• Remarks To be valid, objectvar must be an object type consistent with the
object being assigned to it. The Dim statement only declare a variable that
refers to an object. No actual object is referred to until you use the Set
statement to assign a specific object.

https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/set-statement

72
Set

• The Set keyword is used to create new objects, creating a new


Range, for example. The Set keyword comes in handy when you
want to simplify long lines of code. It is also speeds up your code
when VBA executes it.
• Take these two lines as an example:

http://www.homeandlearn.org/the_set_keyword.html

73
Arreglos

74
Arrays en VBA

• Un Array es un grupo de variables. En Excel VBA, puede hacer


referencia a una variable específica (elemento) de una matriz
utilizando el nombre de la matriz y el número de índice
• Existen dos tipos:
• De una dimensión (Arreglo)
• Dos dimensiones (Matrices)

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

• Es un tipo de datos que deriva de un tipo de datos existente. Puede


utilizar UDT para ampliar los tipos incorporados ya disponibles y
crear sus propios tipos de datos personalizados

• Es una agrupación de variables de igual o distinto tipo bajo un


mismo nombre. Esto permite tener unida una serie de
información relacionada

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

También podría gustarte