Download - 13 arreglos -tema13
![Page 1: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/1.jpg)
Arreglos en 1D (Vectores) y
en 2D (Matrices)
![Page 2: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/2.jpg)
Arreglos
![Page 3: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/3.jpg)
Arreglos en 1D (vectores)
Para lenguajes que inician contando la posición desde cero (0) la estructura
del vector es la siguiente:
![Page 4: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/4.jpg)
Para lenguajes que inician contando la posición desde uno (1) la estructura
del vector es la siguiente:
![Page 5: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/5.jpg)
![Page 6: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/6.jpg)
Declaración de arreglos en 1D en VBA
Para declarar una variable tipo arreglo en VBA primero se debe
conocer que tipo de datos va a guardar la variable por ejemplo :
Integer, double, string, currency, etc.
Después se debe establecer el numero de elementos que va a tener
la variable.
La estructura de declaración es:
Dim Nombre_Variable (Numero de Posiciones) as Tipo de dato
5 8 4 2 1 9Edad=
Dim Edad(5) as Integer
VBA empieza a contar la posición desde 0
Vector con 6
elementos
![Page 7: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/7.jpg)
Otra forma de declarar esta misma variable es:
Dim Edad(0 to 5) as Integer
![Page 8: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/8.jpg)
Generalmente los ingenieros no estamos muy familiarizados con la
posición cero (0) en las matrices y vectores, por esta razón VBA permite
mediante un comando poder inicializar el conteo de la posición desde el
valor de uno (1); para esto se debe poner después de la sentencia Option
Explicit, la sentencia Option Base 1. Con esto se garantiza que los
arreglos inicien desde la posición 1
Option explicit
Option Base 1
5 8 4 2 1 9Edad=
Dim Edad(6) as Integer
VBA empieza a contar la posición desde 1
con la sentencia Option base 1
Vector con 6
elementos
![Page 9: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/9.jpg)
Otra forma de declarar esta misma variable es:
Dim Edad(1 to 6) as Integer
![Page 10: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/10.jpg)
Introducir valores en arreglos en 1D en VBA
Para introducir valores en un arreglo en VBA existen dos formas, la
forma manual o larga y la forma automática o corta.
a) Forma manual o larga
5 8 4 2 1 9
Si usamos la sentencia Option Base 1 la matriz se puede rellenar
manualmente de la siguiente manera:
Edad (1)=5
Edad (2)=8
Edad (3)=4
Edad (4)=2
Edad (5)=1
Edad (6)=9
Elemento 1 del vector Edad es igual a 5
Elemento 6 del vector Edad es igual a 9
![Page 11: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/11.jpg)
Cuando estamos introduciendo vectores o matrices es importante
saber si el vector o matriz se ha guardado u operado
adecuadamente, para esto VBA cuenta con varias formas de
visualización tales como el comando Msgbox, Ventana inmediato y
celdas de Excel.
Usando Msgbox
MsgBox Edad(1)
MsgBox Edad(6)
![Page 12: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/12.jpg)
Usando la ventana inmediato
Para esto debemos activar la ventana inmediato en el menú ver-
ventana inmediato.
El comando para imprimir valores en esta ventana es Debug.Print
Debug.Print Edad(1)
Debug.Print Edad(6)
![Page 13: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/13.jpg)
Usando las celdas de Excel
Cells(1, 1) = Edad(1)
Cells(2, 1) = Edad(6)
Código en VBA
![Page 14: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/14.jpg)
b) Forma automática
Si es un vector corto se puede usar un bucle que a través de un
inputbox vaya pidiendo cada uno de los elementos del vector asi:
![Page 15: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/15.jpg)
Si el vector es demasiado largo lo mas conveniente es leerlo de las
celdas de Excel y guardarlo en el vector de forma automática así:
El objetivo es guardar de forma
automatica en un vector que se
llame Edad estos valores que hay
en la columna A del libro de Excel
![Page 16: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/16.jpg)
Si es un vector o matriz de tamaño desconocido, se declara sin introducir
el tamaño del vector y después se redimensiona con el comando ReDim
Vamos a asumir que el vector es de tamaño desconocido y vamos a ir
escribiendo el código paso a paso asi:
Observemos que se escribe la sentencia Option base 1 para que el
programa empiece a contar los elementos del vector desde la posición 1
![Page 17: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/17.jpg)
Observar que la variable Edad (que es un vector) no tiene un valor
dentro de los paréntesis, esto indica que se va a redimensionar
mas adelante dentro del programa (porque asumimos que el
vector es de tamaño desconocido)
![Page 18: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/18.jpg)
Con este código se obtiene el numero de filas n que esta
ocupando el vector para posteriormente redimensionar la variable
Edad con este valor
Se ubica en la primera celda del vector
Obtiene el valor de la fila inicial
Salta a la ultima fila
Obtiene el valor de la fila final
Calcula el numero total de filas
Redimensiona el vector usando el valor de n
![Page 19: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/19.jpg)
Este código permite seleccionar todo el vector para
posteriormente recorrer cada una de las celdas seleccionadas
Este código va recorriendo cada una de las celdas de la selección y
va guardando el valor de cada celda en la variable Edad en cada
posición i
![Page 20: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/20.jpg)
Con este código puedo imprimir cada valor del vector edad en la
ventana inmediato para poder verificar que lo hizo bien.
Otra opción para poder verificar es escribir el vector guardado en las
celdas de Excel. Esto se hace con el código anterior.
![Page 21: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/21.jpg)
![Page 22: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/22.jpg)
Arreglos en 2D (matrices)
Ejemplo
![Page 23: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/23.jpg)
Declaración de arreglos en 2D en VBA
Para declarar una variable tipo arreglo en 2D en VBA es muy similar
a la declaración en 1D, primero se debe conocer que tipo de datos va
a guardar la variable por ejemplo : Integer, double, string, currency,
etc.
Después se debe establecer el numero de filas y columnas que va a
tener la variable.
La estructura de declaración es:
Dim Nombre_Variable (# de filas, # de columnas)
as Tipo de dato
![Page 24: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/24.jpg)
Al igual que con los vectores, el conteo de filas y columnas empieza por
defecto en (0,0), pero debido a la confusión que esto puede generar para
algunos se puede seguir usando la sentencia option base 1 para que el
conteo inicie en (1,1).
Usando Option base 1 tenemos
(1,1) (1,2) (1,3) (1,4)
(2,1) (2,2) (2,3) (2,4)
(3,1) (3,2) (3,3) (3,4)
Variable=
![Page 25: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/25.jpg)
6 7 8 9
6 9 7 9
8 9 7 6
Cal=
La forma de declarar esta matriz es:
Option Explicit
Option Base 1
Dim Cal(3,4) as Integer
![Page 26: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/26.jpg)
Introducir valores en arreglos en 2D en VBA
Igual que para los vectores, para introducir valores en un arreglo 2D
en VBA existen dos formas, la forma manual o larga y la forma
automática o corta.
a) Forma manual o larga
Si usamos la sentencia Option Base 1 la matriz se puede rellenar
manualmente de la siguiente manera:
Cal (1,1)=6
Cal (1,2)=7
Cal (1,3)=8
Cal (1,4)=9
6 7 8 9
6 9 7 9
8 9 7 6
Cal=
Cal (2,1)=6
Cal (2,2)=9
Cal (2,3)=7
Cal (2,4)=9
Cal (3,1)=8
Cal (3,2)=9
Cal (3,3)=7
Cal (3,4)=6
![Page 27: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/27.jpg)
Para poder verificar que la matriz se ha guardado bien, al igual que con
los vectores se usa el Msgbox, Debug.print y por celdas. (ver el tema de
vectores)
![Page 28: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/28.jpg)
b) Forma automática
Si es una matriz es corta se puede usar un bucle anidado que a
través de un inputbox vaya pidiendo cada uno de los elementos del
vector asi:
![Page 29: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/29.jpg)
Si la matriz es demasiado grande como para introducirla elemento a
elemento, lo mas conveniente es leerla de las celdas de Excel y
guardarla de forma automática así:
El objetivo es guardar de forma automática en una
matriz que se llame Cal estos valores.
![Page 30: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/30.jpg)
Si es un vector o matriz de tamaño desconocido, se declara sin introducir
el tamaño del vector y después se redimensiona con el comando ReDim
Vamos a asumir que la matriz es de tamaño desconocido y vamos a ir
escribiendo el código paso a paso así:
Observemos que se escribe la sentencia Option base 1 para que el programa
empiece a contar los elementos de la matriz desde la posición (1,1)
![Page 31: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/31.jpg)
Observar que la variable cal (que es una matriz) no tiene un valor
dentro de los paréntesis, esto indica que se va a redimensionar
mas adelante dentro del programa (porque asumimos que la
matriz es de tamaño desconocido)
![Page 32: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/32.jpg)
Con este código se obtiene el numero de filas n de la matriz
Se ubica en la primera celda de la matriz
Obtiene el valor de la fila inicial
Salta a la ultima fila
Obtiene el valor de la fila final
Calcula el numero total de filas
Se ubica en la primera celda de la matriz
Obtiene el valor de la columna inicial
Salta a la ultima columna
Obtiene el valor de la columna final
Calcula el numero total de columnas
Con este código se obtiene el numero de columnas m de la matriz
y se redimensiona para un tamaño de nxm.
Redimensiona la matriz para tamaño nxm
![Page 33: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/33.jpg)
Con este For anidado se recorren las filas con el contador i y las
columnas con el contador j. Al ser j el contador mas interno, se
deben primero completar las columnas antes de cambiar a la otra
fila. Cada valor se va guardando en la posición (i,j) de la variable
cal.
![Page 34: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/34.jpg)
Mediante este For anidado se puede escribir la matriz en celdas
de Excel para verificar de que se haya guardado bien en la
variable. Observar que a z se le suma n para evitar que se sobre
escriba sobre la original.
![Page 35: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/35.jpg)
![Page 36: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/36.jpg)
![Page 37: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/37.jpg)
![Page 38: 13 arreglos -tema13](https://reader031.vdocuments.net/reader031/viewer/2022030318/5a6494537f8b9a5d568b4c85/html5/thumbnails/38.jpg)