Está en la página 1de 16

Arreglos y vectores

Los Arreglos se utilizan para almacenar un conjunto de variables, que sean del mismo tipo de dato, y todas estas bajo un mismo nombre. Por ejemplo imaginemos que tenemos 20 variables de tipo String que almacenan nombres (nombre1, nombre2, etc..). si yo ahora quisiera pasar todas estas cadenas a minsculas tendra que utilizar la funcin Lcase con cada variable: nombre1 = Lcase(nombre1), nombre2 = Lcase(nombre2), etc.. En cambio si utilizara un arreglo solucionara mi problema solo a esto

Dim nombres(30) As String For x = 0 To 30 nombres(x) = LCase(nombres(x)) Next

Siguiendo el ejemplo anterior: en vez de escribir la sentencia Lcase 30 veces para cada variable, hemos utilizado un arreglo llamado nombres con un nmero de ndice 30 , es decir que almacena 30 datos de tipo String

1.1 - Declaracin de los arreglos en el cdigo


Para crear un arreglo se debe en primer lugar declararlo como cualquier otra variable, la nica diferencia es que debemos indicar la cantidad de elementos que contendr el arreglo, colocando el nmero de ndice entre parntesis. Por ejemplo : Lo siguiente crea un arreglo de 15 elementos o datos de tipo integer

Dim miArreglo (1 to 15) as integer

Esto crea un arreglo de 11 elementos o datos de tipo String

Dim empleados (10) as String

Como podemos ver en el primer ejemplo hemos declarado un arreglo llamado miArreglo y entre parntesis hemos declarado el rango de capacidad del mismo, es decir la cantidad de datos que podr contener El primer nmero , el 1 , indica el lmite inferior del mismo, y el nmero 15 indica el lmite mximo del arreglo, conformando de esta manera un arreglo que podr almacenar 15 datos de tipo string. En el segundo ejemplo, declaramos un arreglo de 11 elementos de tipo string. Como pods ver hemos indicado solo un nmero que representa el valor mximo del mismo. Cabe aclarar que hemos puesto de ndice el nmero 10, pero en realidad el arreglo contiene 11 elementos ya que cuando NO indicamos el limite inferior , se asume que el mismo comienza desde el 0. Importante: los arreglos se dividen en 2 grupos, los vectores y las matrices. Los vectores son arreglos que contienen una sola dimensin y las matrices 2 o mas dimensiones.

1.2 - Acceder a los datos de un arreglo


Para acceder a los datos de un arreglo o vector, debemos hacerlo mediante el ndice o nmero del elemento del mismo. Por ejemplo:

Dim

alumnos(1

To = = =

4)

As

String "juan" "micaela" "mara"

alumnos(1) alumnos(2) alumnos(3) alumnos(4) = "ignacio"

Primero declaramos un arreglo llamado alumnos, de tipo string y que contendr 4 elementos. Luego le asignamos un valor de cadena como a cualquier otra variable de tipo string, pero con la diferencia que para referirnos al elemento utilizamos el n de ndice del mismo. Otro ejemplo

Dim paises(2) As String

' Llena el vector con datos paises(0) = "Argentina" paises(1) = "Per" paises(2) = "Brasil" ' Recorre los elementos del vector For x = 0 To 2 MsgBox "Nombre del pas : " & paises(x) Next x

En este ltimo ejemplo, declaramos y creamos un vector de 3 elementos que contendr el nombre de 3 pases. Luego en un bucle For utilizamos la funcin MsgBox para mostrar los elementos del arreglo, pasndole como parmetro del ndice la variable x del bucle For

1.3 - Utilizar una estructura Type o UDT en un arreglo


Como vimos, en un arreglo podemos almacenar datos de cualquier tipo pero no mezclarlos, es decir podemos crear arreglos de tipo string, de tipo Integer etc,,, pero sin duda que lo mas importante y de mas utilidad a la hora de programar es la utilizacin de datos definidos por nosotros mediante una estructura Type Por ejemplo:

Option Explicit

' Estructura de dato para el vector Private Type agenda nombre As String apellido As String cpostal As Integer

End Type ' Declaramos el vector Dim personas(1 To 3) As agenda

Private Sub Form_Load()

' Llenamos con datos para el elemento 1 del arreglo personas(1).nombre = "carlos" personas(1).apellido = "Martnez" personas(1).cpostal = 1900 ' Llenamos con datos para el elemento 2 del arreglo personas(2).nombre = "Hctor" personas(2).apellido = "rosales" personas(2).cpostal = 1898 ' Llenamos con datos para el elemento 3 del arreglo personas(3).nombre = "Albert" personas(3).apellido = "Einstein" personas(3).cpostal = 1324 End Sub

Para utilizar una estructura definida por nosotros en vectores o matrices, se hace de la forma habitual, con la diferencia que debemos declarar el arreglo utilizando el tipo de dato Type que hayamos creado, en este caso Dim personas(1 to 3) as agenda

2 - Las matrices

Como se dijo anteriormente, las matrices son arreglos de mas de 1 dimensin (2 o mas), a diferencia de los vectores que poseen una sola dimensin. Podemos imaginar una matriz bidimensional ( 2 dimensiones) , como una cuadrcula con filas y columnas, donde las filas representaran las coordenadas x y las columnas las coordenadas y. A una matriz de 3 dimensiones o tridimensional se la puede imaginar con las coordenadas x, y, z, y esta es ideal para representar figuras en el espacio por ejemplo. Las matrices se declaran en el cdigo de manera igual que los vectores, con la diferencia que debemos indicar mas subndices de acuerdo a la cantidad de dimensiones que posea la matriz. por lo general no se suele utilizar matrices de mas de 3 dimensiones..

2.1 - Ejemplo de matriz de 2 dimensiones

Matriz bidimensionales de 6 x 8 (de 2 dimensiones).

Dim personas (1 to 6, 1 to 8) as string

Si luego quisiera acceder a los datos de la misma basta con referirnos a los subndices Por ejemplo:

personas (1, personas (2, personas (1, personas (1, personas (2, personas (4, personas (6, personas (6, personas (6, 8) = "mariana"

1) 1) 7) 8) 2) 1) 2) 5)

= = = = = = = =

"Natalia" "pedro" "valeria" "jos" "carolina" "raquel" "eustaquio" "maria"

El total de ndices posibles para almacenar datos o valores en el ejemplo anterior es de 48 datos, ya que si multiplicamos 6 x 8 nos da como total 48 valores posibles para utilizar en la matriz bidimensional.

En este ejemplo creamos una matriz de 3 dimensiones de 3 x 3 x 3

Dim cubo (1 to 3, 1 to 3, 1 to 3) as integer

para acceder a los datos sera exactamente de la misma manera pero debemos utilizar un ndice mas. Ejemplo:

cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo cubo (3, 3 ,

(1, (1, (1, (1, (1, (1, (1, (1, (1, (2, (2, (2, (2, (2, (2, (2, (2, (2, (3, (3, (3, (3, (3, (3, (3, (3, 3) = 50

1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3

, , , , , , , , , , , , , , , , , , , , , , , , , ,

1) 2) 3) 1) 2) 3) 1) 2) 3) 1) 2) 3) 1) 2) 3) 1) 2) 3) 1) 2) 3) 1) 2) 3) 1) 2)

= = = = = = = = = = = = = = = = = = = = = = = = = =

50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50

En el ejemplo anterior, que es un poco extenso, es para que veas todos los posibles valores que puedes almacenar en una matriz de 3 x 3 x 3, y que da como resultado un arreglo de 27 valores posibles.

3 - Vectores dinmicos
Hasta ahora habamos visto solo vectores o arreglos de tamao fijo, pero qu pasa cuando no sabemos el tamao o el largo de un vector y queremos que sea variable ?. Visual basic posee una sentencia o funcin que nos permite cambiar el largo de un vector en tiempo de ejecucin, dndonos as mas flexibilidad, y de esta manera no desperdiciar memoria y recursos de la pc creando vectores mas largos de lo que realmente necesitamos. Esta funcin se llama ReDim y ReDim Preserve , y un ejemplo de como aplicarla sera de la siguiente manera:

3.1 - Ejemplo de vectores y arreglos dinmicos

En lo siguiente, primero declaramos un vector de la forma como lo hacemos siempre con la diferencia de que en vez de colocar un tamao declaramos el vector solo con los parntesis :

Dim alumnos () as string

Ahora le establecemos un tamao, por ejemplo de 4 elementos y le agregamos valores:

ReDim

alumnos(1

To = = =

4)

As

String "Luciano" "Esteban" "Mariano"

alumnos(1) alumnos(2) alumnos(3) alumnos(4) = "Pedro"

Ahora para redimensionar el tamao del vector por ejemplo a 7 elementos, utilizamos la funcin ReDim Preserve, para preservar los 4 valores anteriores y le agregamos 3 valores mas:

ReDim

Preserve

alumnos(1 = =

To

7) "Karina" "Ral"

alumnos(5) alumnos(6) alumnos(7) = "Romina"

Nota: si utilizamos la sentencia ReDim, o mejor dicho si redimensionamos el vector sin utilizar la sentencia ReDim preserve, los valores que contena el vector anteriormente se perdern Eliminar o vaciar un vector Para eliminar un array, arreglo o vector, podemos utilizar Erase, por ejemplo:

Erase Nombre_Del_Vector

4 - Funciones de VB para trabajar con Arreglos - LBound y UBound


Estas funciones son ideales para trabajar con vectores y matrices que han sido declaradas dinmicamente Lbound y Ubound nos devuelve un nmero de tipo Long que nos permite saber el lmite superior e inferior de un vector o una matriz.

4.1 - Ejemplo de Ubound y Bound Private Sub Form_Load()

'Variables Para almacenar los lmites superior e inferior Dim LimiteInferior As Long Dim LimiteSuperior As Long 'Declaramos 3 matrices, de una dimensin, _

de dos dimensiones y de 3 Dim UnVector(1 To 520) As Integer Dim UnaMatriz(20, 5 To 100) As String Dim OtraMatriz(10, 20, 30) As Long ' Devuelve 1 LimiteInferior = LBound(UnVector) ' Devuelve 520 LimiteSuperior = UBound(UnVector) ' Devuelve 0 LimiteInferior = LBound(UnaMatriz, 1) ' Devuelve 20 LimiteSuperior = UBound(UnaMatriz, 1) ' Devuelve 5 LimiteInferior = LBound(UnaMatriz, 2) ' Devuelve 100 LimiteSuperior = UBound(UnaMatriz, 2) ' Devuelve 0 LimiteInferior = LBound(OtraMatriz, 1) ' Devuelve 10 LimiteSuperior = UBound(OtraMatriz, 1) ' Devuelve 0 LimiteInferior = LBound(OtraMatriz, 2) ' Devuelve 20 LimiteSuperior = UBound(OtraMatriz, 2) ' Devuelve 0 LimiteInferior = LBound(OtraMatriz, 3) ' Devuelve 30 LimiteSuperior = UBound(OtraMatriz, 3)

End Sub

Como habrs visto en los ejemplos anteriores, para conocer los limites superiores e inferiores en los vectores, solo se debe pasar como parmetro a las funciones Lbound y Ubound, el nombre del vector con el cual queremos trabajar. En cambio en las matrices se aade un segundo parmetro en el cual debemos indicar el nmero de la dimensin en la cual queremos recuperar los valores.

Ejemplo 2 de LBound y UBound:

Si deseamos recorrer todos los elementos de un vector o una matriz podemos hacerlo mediante un bucle For de la siguiente manera:

For x = LBound(vector) To UBound(vector) MsgBox vector(x) Next i

4.2 - Funcin Join, Split y Filter :

Visual basic en su sexta versin incorpora estas 3 funciones para trabajar solo con vectores. Estas funciones estn relacionadas con el tratamiento de las cadenas de caracteres.

Funcin Join Esta funcin se utiliza para unir en una sola variable el conjunto de subcadenas de un vector. Esta funcin tiene solo 2 parmetros y es muy fcil de usar. Ejemplo:

Dim Dim

micadena vector(1

as To = = 3) As

string String "Carlos" "Pedro"

vector(1) vector(2) vector(3) = "Juan"

Ahora ejecutando Join, la variable micadena pasara a valer "Carlos-Pedro-Juan"

micadena = join (vector, "-")

Nota: En el primer parmetro de la funcin debemos indicar el vector en el cual trabajar, y en el segundo se debe indicar un delimitador de caracter para separar las cadenas. Si no especificamos ninguno, visual basic utilizar por defecto un espacio vaco o en blanco (" ") para separar cada subcadena .

Funcin Split: Esta funcin hace el trabajo inverso de la funcin Join. Split se utiliza para rellenar un vector dinmico que contiene un nmero de subcadenas a partir de una cadena que le pasamos como parmetro a la funcin. Para aclarar un poco un ejemplo

Private Sub Form_Load() 'Una variable para almacenar una cadena Dim Micadena As String 'Vector dinmico Dim Vector() As String 'Le damos un valor a la variable Micadena = "maria/natalia/romina" 'Ejecutamos la funcin Split Vector = Split(Micadena, "/") 'Ahora el vector dinmico pasara a _ contener los siguientes valores: Vector(0) = "mara" Vector(1) = "natalia" Vector(2) = "Romina"

End Sub

Nota: una cosa importante es que en el vector anterior no se ha declarado un rango , ya que la funcin devuelve un vector cuya cantidad de elementos se ignora, es decir no se conoce. Enlaces relacionados a split
Pasar un archivo de texto a un array o matriz usando split

Funcin Filter : La funcin Filter se utiliza para filtrar subcadenas de un vector dependiendo de un determinado criterio de bsqueda. Los parmetros que lleva la funcin son los siguientes: Filter (vector donde buscar, cadena a buscar, valor booleano que indica si incluir o excluir la cadena) Ejemplo:

' Vector Dim Alumnos(1 To 4) As String ' Vector dinmico para almacenar el resultado Dim Resultado() As String Alumnos(1) = "Luciano" Alumnos(2) = "Lucas" Alumnos(3) = "juan" Alumnos(4) = "Natalia" ' Ejecutamos Filter Resultado = Filter(Alumnos, "Lu", True)

' Ahora el vector dinmico "resultado" pasa a contener MsgBox Resultado(0), vbInformation ' Luciano MsgBox Resultado(1), vbInformation ' Lucas

5 - Arreglos de controles en visual basic

Hasta ac se vi los aspectos de los vectores y matrices como estructuras que nos permiten almacenar datos y resolver problemas lgicos en nuestros programas. Ahora veremos los Arreglos de controles o vectores de controles Un arreglo de controles es un conjunto de controles, todos de la misma clase (todos TextBox, todos Label, etc...) que poseen un mismo nombre y cada uno posee un nmero de ndice que los identifica y los hace nicos con respecto a los dems, y conformando entonces un vector de controles. por ejemplo en vez de tener 3 Command, llamados command1, command2 y command3, puedo crear un arreglo de 3 botones. Estos 3 botones comparten el mismo nombre pero cada botn se distingue del resto por un nmero de ndice, es decir si por ejemplo nuestro botn de comando se llama cmd pasara a tener un cmd(1), un cmd (2) y un cmd(3). En un arreglo de controles todos los controles deben ser del mismo tipo y adems no puede haber un control dentro del arreglo que tenga el mismo nmero de ndice, ya que sera imposible identificarlo en el conjunto, adems VB no lo permitira y nos mostrara un error. Las ventajas principales que tenemos cuando trabajamos con un vector de controles son las siguientes: 1. Todos los controles que forman el arreglo comparten el mismo procedimiento de cdigo, con lo cual si tenemos muchos controles que tienen que ejecutar la misma instruccin no debemos escribir cdigo de ms en cada control. 2. Tener 20 cajas de texto, por ejemplo, consumen mucha mas memoria que utilizar un vector de 20 cajas de texto. 3. Es posible crear controles en tiempo de ejecucin, a partir de un arreglo de controles ya creado.

4. Es mas fcil manipular y establecer las propiedades en un vector de controles refiriendonos al subndice de los mismos.

5.1 - Ejemplo para crear un arreglo de controles


Para crear un arreglo de controles podemos hacerlo de 2 maneras. La primera opcin es copiar un control ya dibujado y pegarlo en el formulario. Luego visual basic nos mostrar un dilogo preguntndonos si queremos crear una matriz de controles. Al contestar que si, ya se ha creado un arreglo con 2 controles, en este caso el primer control tendr el ndice 0 y el que pegamos el ndice 1. Si queremos seguir agregando mas controles cuando peguemos nuevamente otro control visual basic no nos preguntar nuevamente si deseamos crear una matriz del control ya que esta ya est creada, y por lo tanto agregar un nuevo control y le agregar el nmero de ndice correspondiente para diferenciarlo del resto, en este caso el 2. Ahora si observas en la propiedad index de los controles que forman el arreglo vers que estos tienen un nmero de ndice que antes no tenan al no formar parte de un arreglo de controles Nota: cualquier control de visual basic que no tenga un arreglo creado, la propiedad index de los mismos no tendr ningn nmero o valor, ya que esta propiedad est reservada para los controles que formen parte de un vector o arreglo. La otra opcin para crear un arreglo, es ingresar directamente el nmero de ndice en la propiedad index del control del cual queremos crear un arreglo.

Ejemplo:

El ejemplo consiste en crear 10 Arreglos de TextBox y lo que se va a hacer es mediante un bucle poner la propiedad Enabled de los controles en False, es decir los vamos a deshabilitar a todos. Como te dars cuenta, si tuvieses que hacer esto manualmente, es decir deshabilitar cada TextBox individualmente tendras que escribir text1.enabled = False y as para cada uno de los controles. en cambio haciendo un arreglo de controles, recorremos mediante un For todos los controles refiriendonos al ndice y establecindole la propiedad Enabled en False para deshabilitarlos. Create un arreglo de 10 TextBox Para eso coloca un text1 en el formulario. despus copialo y pegalo, vb te va a preguntar si quers hacer un arreglo, decile que si, hasta que tengas 10 o los que quieras.

Si te fijs ahora en la ventana de propiedades, cuando seleccionas un textBox en la propiedad index te vas a dar cuenta que poseen un nmero, ese es el ndice que los identifica, y por medio de ese ndice nos vamos a referir en el bucle For El cdigo de este ejemplo bien simple quedara as:

Dim For i

i = =

As 0 To

Integer 9 False

text1(i).Enabled Next

Como pods ver, le pasamos en el parmetro ndice el valor de la variable i para referirnos a ese text1 en particular y asignarle la propiedad Enabled en False

5.2 - Pasar un arreglo de controles como parmetro


Una tarea habitual es la de poder pasar un arreglo o vector de controles como parmetro a una Sub o function. Por ejemplo supongamos que tenemos un programa que tiene muchos formularios. y varios de esos formularios tienen una funcin que se encarga de limpiar todas los textBox y eliminar el contenido de los mismos Para solucionar esto, y no tener que repetir cdigo, podramos crear en un mdulo de cdigo, una SubRutina para que la puedan utilizar y acceder desde todos los formularios. Para poder pasar un vector como parmetro a una rutina, la variable o argumento en la Subrutina, debe estar declarada como de tipo Object Ejemplo Colocar en un formulario un arreglo de textBox, por ejemplo TextBox1(0), TextBox1(1) y TextBox1(2) Colocar un CommandButton para limpiar el contenido de las cajas de texto

Cdigo fuente en el formulario

Option Explicit Private Sub Command1_Click() Call Limpiar_TextBox(Text1) End Sub

' Recibe el vector como parmetro Sub Limpiar_TextBox(El_TextBox As Object) Dim i As Integer For i = 0 To El_TextBox.Count - 1 El_TextBox(i).Text = vbNullString Next End Sub