Sección de tutoriales y manuales vb

Los arreglos, matrices, vectores y vectores de controles

Volver al índice



 

 

Contenido

1 - Arreglos y vectores

1.1 - Declaración de los arreglos en el código

1.2 - Acceder a los datos de un arreglo

1.3 - Arreglos y estructuras (UDT)

2 - Matrices

2.1 - Ejemplo de matriz de 2 dimensiones

3 - Arreglos y vectores dinámicos

3.1 - Ejemplo para crear un Vector dinámico

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

4.1 - Ejemplos de Lbound y Ubound

4.2 - Función Join, Split y Filter

5 - Los arreglos de controles

5.1 - Ejemplo para crear un arreglo de controles

5.2 - Pasar arreglo de controles como parámetro a un procedimento

 

 


1 - 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 minúsculas tendría que utilizar la función Lcase con cada variable: nombre1 = Lcase(nombre1), nombre2 = Lcase(nombre2), etc..

En cambio si utilizara un arreglo solucionaría 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 número de índice 30 , es decir que almacena 30 datos de tipo String

 

 

1.1 - Declaración de los arreglos en el código

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 número de índice entre paréntesis. 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 paréntesis hemos declarado el rango de capacidad del mismo, es decir la cantidad de datos que podrá contener

El primer número , el 1 , indica el límite inferior del mismo, y el número 15 indica el límite máximo 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 podés ver hemos indicado solo un número que representa el valor máximo del mismo. Cabe aclarar que hemos puesto de índice el número 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 dimensión 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 número del elemento del mismo. Por ejemplo:

Dim alumnos(1 To 4) As String

alumnos(1) = "juan"
alumnos(2) = "micaela"
alumnos(3) = "maría"
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 país : " & paises(x)

    Next x 

 

En este último ejemplo, declaramos y creamos un vector de 3 elementos que contendrá el nombre de 3 países. Luego en un bucle For utilizamos la función MsgBox para mostrar los elementos del arreglo, pasándole como parámetro 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 utilización 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 = "Martínez"
    personas(1).cpostal = 1900

    ' Llenamos con datos para el elemento 2 del arreglo

    personas(2).nombre = "Héctor"
    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 dimensión (2 o mas), a diferencia de los vectores que poseen una sola dimensión.

Podemos imaginar una matriz bidimensional ( 2 dimensiones) , como una cuadrícula con filas y columnas, donde las filas representarían 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 código de manera igual que los vectores, con la diferencia que debemos indicar mas subíndices 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 subíndices

Por ejemplo:

personas (1, 1) = "Natalia"
personas (2, 1) = "pedro"
personas (1, 7) = "valeria"
personas (1, 8) = "josé"
personas (2, 2) = "carolina"
personas (4, 1) = "raquel"
personas (6, 2) = "eustaquio"
personas (6, 5) = "maria"
personas (6, 8) = "mariana"

 

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 sería exactamente de la misma manera pero debemos utilizar un índice mas.

Ejemplo:

cubo (1, 1 , 1) = 50
cubo (1, 1 , 2) = 50
cubo (1, 1 , 3) = 50
cubo (1, 2 , 1) = 50
cubo (1, 2 , 2) = 50
cubo (1, 2 , 3) = 50
cubo (1, 3 , 1) = 50
cubo (1, 3 , 2) = 50
cubo (1, 3 , 3) = 50
cubo (2, 1 , 1) = 50
cubo (2, 1 , 2) = 50
cubo (2, 1 , 3) = 50
cubo (2, 2 , 1) = 50
cubo (2, 2 , 2) = 50
cubo (2, 2 , 3) = 50
cubo (2, 3 , 1) = 50
cubo (2, 3 , 2) = 50
cubo (2, 3 , 3) = 50
cubo (3, 1 , 1) = 50
cubo (3, 1 , 2) = 50
cubo (3, 1 , 3) = 50
cubo (3, 2 , 1) = 50
cubo (3, 2 , 2) = 50
cubo (3, 2 , 3) = 50
cubo (3, 3 , 1) = 50
cubo (3, 3 , 2) = 50
cubo (3, 3 , 3) = 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 dinámicos


Hasta ahora habíamos visto solo vectores o arreglos de tamaño fijo, ¿ pero qué pasa cuando no sabemos el tamaño o el largo de un vector y queremos que sea variable ?.

Visual basic posee una sentencia o función que nos permite cambiar el largo de un vector en tiempo de ejecución, dándonos 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 función se llama ReDim y ReDim Preserve , y un ejemplo de como aplicarla sería de la siguiente manera:

 

3.1 - Ejemplo de vectores y arreglos dinámicos

 

En lo siguiente, primero declaramos un vector de la forma como lo hacemos siempre con la diferencia de que en vez de colocar un tamaño declaramos el vector solo con los paréntesis :

Dim alumnos () as string

 

Ahora le establecemos un tamaño, por ejemplo de 4 elementos y le agregamos valores:

ReDim alumnos(1 To 4) As String

alumnos(1) = "Luciano"
alumnos(2) = "Esteban"
alumnos(3) = "Mariano"
alumnos(4) = "Pedro"

 

Ahora para redimensionar el tamaño del vector por ejemplo a 7 elementos, utilizamos la función ReDim Preserve, para preservar los 4 valores anteriores y le agregamos 3 valores mas:

ReDim Preserve alumnos(1 To 7)

alumnos(5) = "Karina"
alumnos(6) = "Raúl"
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 contenía el vector anteriormente se perderán

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 dinámicamente

Lbound y Ubound nos devuelve un número de tipo Long que nos permite saber el límite superior e inferior de un vector o una matriz.

 

4.1 - Ejemplo de Ubound y Bound

Private Sub Form_Load()


    'Variables Para almacenar los límites superior e inferior
    Dim LimiteInferior As Long
    Dim LimiteSuperior As Long

    'Declaramos 3 matrices, de una dimensión, _
     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 habrás visto en los ejemplos anteriores, para conocer los limites superiores e inferiores en los vectores, solo se debe pasar como parámetro a las funciones Lbound y Ubound, el nombre del vector con el cual queremos trabajar.

En cambio en las matrices se añade un segundo parámetro en el cual debemos indicar el número de la dimensión 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 - Función Join, Split y Filter :

 

Visual basic en su sexta versión incorpora estas 3 funciones para trabajar solo con vectores. Estas funciones están relacionadas con el tratamiento de las cadenas de caracteres.


Función Join

Esta función se utiliza para unir en una sola variable el conjunto de subcadenas de un vector. Esta función tiene solo 2 parámetros y es muy fácil de usar. Ejemplo:

Dim micadena as string
Dim vector(1 To 3) As String

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

 

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

micadena = join (vector, "-")

 

Nota: En el primer parámetro de la función 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 vacío o en blanco (" ") para separar cada subcadena .

 

Función Split:

Esta función hace el trabajo inverso de la función Join.

Split se utiliza para rellenar un vector dinámico que contiene un número de subcadenas a partir de una cadena que le pasamos como parámetro a la función.

Para aclarar un poco un ejemplo

 Private Sub Form_Load()

    'Una variable para almacenar una cadena
    Dim Micadena As String 'Vector dinámico
    Dim Vector() As String

    'Le damos un valor a la variable
    Micadena = "maria/natalia/romina"

    'Ejecutamos la función Split
    Vector = Split(Micadena, "/")

    'Ahora el vector dinámico pasaría a _
     contener los siguientes valores:

    Vector(0) = "maría"
    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 función 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

 

Función Filter :

La función Filter se utiliza para filtrar subcadenas de un vector dependiendo de un determinado criterio de búsqueda. Los parámetros que lleva la función 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 dinámico 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 dinámico "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 lógicos 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 número de índice que los identifica y los hace únicos con respecto a los demás, 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 botón se distingue del resto por un número de índice, es decir si por ejemplo nuestro botón de comando se llama cmd pasaría 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 además no puede haber un control dentro del arreglo que tenga el mismo número de índice, ya que sería imposible identificarlo en el conjunto, además VB no lo permitiría y nos mostraría 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 código, con lo cual si tenemos muchos controles que tienen que ejecutar la misma instrucción no debemos escribir código de más 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 ejecución, a partir de un arreglo de controles ya creado.
  4. Es mas fácil manipular y establecer las propiedades en un vector de controles refiriendonos al subíndice 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 opción es copiar un control ya dibujado y pegarlo en el formulario. Luego visual basic nos mostrará un diálogo preguntándonos 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 número 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 verás que estos tienen un número de índice que antes no tenían 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á ningún número o valor, ya que esta propiedad está reservada para los controles que formen parte de un vector o arreglo.

La otra opción para crear un arreglo, es ingresar directamente el número 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 darás cuenta, si tuvieses que hacer esto manualmente, es decir deshabilitar cada TextBox individualmente tendrías 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 estableciéndole la propiedad Enabled en False para deshabilitarlos.

Create un arreglo de 10 TextBox Para eso coloca un text1 en el formulario. después copialo y pegalo, vb te va a preguntará si querés hacer un arreglo, decile que si, hasta que tengas 10 o los que quieras.

Si te fijás ahora en la ventana de propiedades, cuando seleccionas un textBox en la propiedad index te vas a dar cuenta que poseen un número, ese es el índice que los identifica, y por medio de ese índice nos vamos a referir en el bucle For

El código de este ejemplo bien simple quedaría así:

Dim i As Integer

For i = 0 To 9

text1(i).Enabled = False

Next

 

Como podés ver, le pasamos en el parámetro í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 parámetro

Una tarea habitual es la de poder pasar un arreglo o vector de controles como parámetro a una Sub o function.

Por ejemplo supongamos que tenemos un programa que tiene muchos formularios. y varios de esos formularios tienen una función que se encarga de limpiar todas los textBox y eliminar el contenido de los mismos

Para solucionar esto, y no tener que repetir código, podríamos crear en un módulo de código, una SubRutina para que la puedan utilizar y acceder desde todos los formularios.

Para poder pasar un vector como parámetro 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

 

Código fuente en el formulario

Option Explicit

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


' Recibe el vector como parámetro
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

 

 


Volver al menú del tutorial

 

 

 

 


Buscar en Recursos vb