Manejo de Arreglos

Un arreglo es un conjunto de datos almacenados cada uno de ellos en una variable. Si quisiéramos guardar el precio de 10 frutas podríamos hacer: Pr1 = 5, Pr2 = 8.20, Pr3 = 3.20, ... Pr10 = 8.5. Y los usaríamos independientemente uno de otro cuando lo necesitemos. Pero si se trata de guardar 350 números de cuenta de clientes de un banco, no podríamos usar nCta1, ..., nCta350.

En lugar de ello se usan los arreglos o matrices(pueden ser vectores) que son variables subindicadas; es decir, se tiene un único nombre de variable y cada elemento se designa con un subíndice. Por ejemplo: X(1), X(2), ..., X(350), X(12421), etc. Cada uno de ellos permite guardar un valor sea número o texto.

Los arreglos se tienen que declarar usando Dim:

Arreglos de forma vectorial:
DIM A(100), B(100), As Double

Arreglos matriciales:
DIM xMat(20,20), yMat(20,20) As Integer

Arreglos de cadenas de caracteres
DIM NroCta(50), nCLiente(50), Direc(50), Telef(50) As String
etc.

Sirve para realizar cálculos aritméticos con vectores o matrices.

Por ejemplo:

Dim X(10), Y(10), Z(10) As Double

For i = 1 to 8
Z(i) = X(i) + Y(i)
Next

Suma los elementos de los arreglos X e Y y los guarda en el arreglo Z
 

Facilitan el proceso pues se pueden leer datos y almacenarlos en arreglos, se pueden procesar y luego se pueden imprimir. Lectura, proceso y salida, como tres procesos independientes uno de otro.

Ejemplo 1

Pasemos al Excel. Abra su libro MisMacros.xlsm, si no lo tiene, descárguelo de la siguiente dirección:

Abra su libro de macros. Si no lo tiene haga clic aquí

Use [Alt]+F11 para ir al editor.

Vaya al editor e inserte un nuevo módulo que debe ser el Módulo 7.

Vamos a manipular este módulo:

Como puede ver, en la ventana de propiedades (del objeto Módulo7), tenemos sólo su nombre (name) y se llama Módulo7. Haga clic en . Ahora digite ModArreglo. Observe la lista de los módulos, están en orden alfabético.

Estando activo (abierto o seleccionado) el ModArreglo, digite el siguiente procedimiento que nos permite el manejo de arreglos vectoriales:


Sub Arreglos01()
Dim A(100) As Double
Dim i As Integer

' Vamos a leer n datos
' Calcularemos su suma y al final su promedio
' los imprimiremos
n = Val(InputBox("Nro de datos a procesar:"))

' Lectura de datos
For i = 1 To n
A(i) = Val(InputBox("Dato: " & i))
Next

' Segmento de cálculo
Suma = 0
For i = 1 To n
Suma = Suma + A(i)
Next

Promedio = Suma / n
' Emisión de resultados
MsgBox "La suma de los datos leídos es: " + Str(Suma) + Chr(13) + "Su promedio es: " + Str(Promedio)

End Sub

Como puede ver, hemos definido un arreglo vectorial llamado A. Como queremos procesar n datos, para usar el For ... Next, necesitamos el tope, por eso leemos un valor para n. Note que el i-ésimo valor leído lo guardamos en A(i), como número. Luego de la lectura, sumamos los n elementos de A usando For ... Next. Finalmente se imprime la suma y promedio de manera elegante.

Ejemplo 2

En este ejemplo, vamos a leer n pares de datos en formato nnn,mm. Los separamos, lo convertimos en valor numérico, lo guardamos cada uno en un vector. Todo esto dentro de un For ... Next. En una sección hemos usado funciones de cadena, de manera que ahora estamos usando dichas funciones.

En el editor, al final del procedimiento del Ejemplo 1, ingrese el siguiente procedimiento:


Sub Arreglos02()
'
' Ahora vamos a leer dos vectores
' Calcular otro vector que sea la suma o el producto escalar de ellos

Dim A(100), B(100), C(100), D(100) As Double
' Leeremos n para el número de datos a procesar
n = Val(InputBox("Nro de datos a procesar:"))
' Leemos los elementos del vector en pares
' cada elemento va a estar separado por coma.
' cada uno de ellos pueden ser negativos o tener decimales

' Segmento de ingreso de datos
For i = 1 To n
xCad = InputBox("Dato: " & i)
A(i) = Val(Left(xCad, InStr(1, xCad, ",") - 1))
B(i) = Val(Mid(xCad, InStr(1, xCad, ",") + 1))
Next

' Emisión de los datos leídos

For i = 1 To n
MsgBox A(i) & " , " & B(i)
Next

'
' Proceso de los datos
For i = 1 To n
C(i) = A(i) + B(i)
D(i) = A(i) * B(i)
Next
' Emisión de los resultados
' Vamos a guardar los elementos en una cadena para después imprimirlos
xCad1 = ""
xCad2 = ""

For i = 1 To n
xCad1 = xCad1 + Str(C(i)) + Chr(13)
xCad2 = xCad2 + Str(D(i)) + Chr(13)
Next

MsgBox "El vector suma: " & Chr(13) + xCad1
MsgBox "El vector producto: " & Chr(13) + xCad2

End Sub

Nota:

Observe cómo la Sección de la lectura, el proceso y la salida se pueden ejecutar de manera independiente. Pero el proceso necesita datos que ya fueron leídos. Del mismo modo, la salida requiere de resultados que ya fueron calculados o leídos. Si este concepto de relación de independencia en l ejecución y dependencia de datos se produjeran en segmentos muy grandes y complejos, podríamos separarlos a cada Sección en un procedimiento y ver cómo los podemos usar desde otro que pudiera controlar su ejecución. Esto lo veremos en otra sección, antes de empezar objetos.

El procedimiento se muestra en la siguiente imagen.
 

En la siguiente sesión veremos el uso de módulos

haga clic aquí