13 arreglos -tema13

38
Arreglos en 1D (Vectores) y en 2D (Matrices)

Transcript of 13 arreglos -tema13

Page 1: 13 arreglos -tema13

Arreglos en 1D (Vectores) y

en 2D (Matrices)

Page 2: 13 arreglos -tema13

Arreglos

Page 3: 13 arreglos -tema13

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

Para lenguajes que inician contando la posición desde uno (1) la estructura

del vector es la siguiente:

Page 5: 13 arreglos -tema13
Page 6: 13 arreglos -tema13

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

Otra forma de declarar esta misma variable es:

Dim Edad(0 to 5) as Integer

Page 8: 13 arreglos -tema13

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

Otra forma de declarar esta misma variable es:

Dim Edad(1 to 6) as Integer

Page 10: 13 arreglos -tema13

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

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

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

Usando las celdas de Excel

Cells(1, 1) = Edad(1)

Cells(2, 1) = Edad(6)

Código en VBA

Page 14: 13 arreglos -tema13

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

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

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

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

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

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

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
Page 22: 13 arreglos -tema13

Arreglos en 2D (matrices)

Ejemplo

Page 23: 13 arreglos -tema13

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

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

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

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

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

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

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

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

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

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

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

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
Page 36: 13 arreglos -tema13
Page 37: 13 arreglos -tema13
Page 38: 13 arreglos -tema13