Descripción de las matrices de los procedimientos Sub de Visual Basic para aplicaciones

Seleccione idioma Seleccione idioma
Id. de artículo: 843145 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

el artículo contiene información sobre las matrices de procedimientos Sub en Visual Basic para aplicaciones. Los tres tipos de matriz siguientes se describen en este artículo:
  • matrices de general. Una matriz general es una única variable que se declara de tal manera que pueden almacenar varios valores del mismo tipo de datos.
  • matrices de multidimensional. Las matrices multidimensionales pueden tener hasta 60 dimensiones en Visual Basic para aplicaciones.
  • matrices de dinámicos. Las dimensiones de matrices dinámicas se pueden incrementar o disminuir.

el artículo utiliza ejemplos para demostrar cada tipo de matriz. Además, este artículo contiene un ejemplo de cómo rellenar una matriz con datos de hoja de cálculo.

INTRODUCCIÓN

Este artículo describe las matrices de los procedimientos Sub de Visual Basic para aplicaciones. En este artículo se describe estos tres tipos de matrices: matrices generales, las matrices multidimensionales y matrices dinámicas. Este artículo también proporciona algunos ejemplos de cada tipo de matriz y un ejemplo de cómo rellenar una matriz con datos de la hoja de cálculo.

Información general acerca de los procedimientos Sub

Un procedimiento Sub es una serie de instrucciones de Visual Basic delimitadas por la instrucción Sub y la instrucción End Sub. El procedimiento Sub realiza acciones, pero el procedimiento Sub no devuelve un valor. Un procedimiento Sub puede tomar argumentos que se pasan por un procedimiento de llamada. Ejemplos de dichos argumentos son constantes, variables y expresiones. Si un procedimiento Sub no tiene argumentos, la instrucción Sub debe incluir un conjunto de paréntesis vacío

Nota En este documento, el término que Sub procedimiento se utilizan como sinónimos con el término macro .

Cada macro tiene la estructura siguiente:

Sub MacroName ()
lines of macro code
End Sub


Las reglas para nombres de procedimientos Sub son:
  • Debe utilizar una letra como el primer carácter.
  • No puede utilizar un nombre que es más de 255 caracteres.
  • Puede utilizar un espacio, un período, un signo de exclamación, una en el signo, una y comercial, un signo de dólar o un signo de número en el nombre.
  • No se puede utilizar palabras clave restringidas.

Nota Para ver una lista completa de palabras clave restringidas, haga clic en contenido e índice en el menú de Ayuda en el Editor de Visual Basic y, a continuación, escriba palabras clave .

Puede tener dos macros en el mismo proyecto con el mismo nombre, pero debe seguir estas reglas:
  • Las dos macros con el mismo nombre deben estar en distintos módulos.
  • Si hay dos macros en el mismo proyecto tienen el mismo nombre, debe poner el nombre de módulo en delante del nombre de macro para llamar a una macro.

Por ejemplo, para llamar a la macro Test en un módulo que se denomina Module2, utilice la sintaxis siguiente:

Module2.Test

Más información

Matrices generales

Una matriz es una única variable que se declara de tal manera que pueden almacenar varios valores del mismo tipo de datos. Si desea tener acceso a cualquier elemento de la variable de matriz, debe proporcionar el número de índice de elemento y el nombre de la variable.

Declarar una variable de matriz

Las matrices se declaran como variables no de matriz, mediante la instrucción Dim, la instrucción static, la instrucción Private y la instrucción Public. Variables de matriz no son también conocido como variables escalares . La diferencia entre las variables de matriz y variables escalares es que debe especificar el tamaño de la variable de matriz al declararla. Indica el tamaño de la matriz a Visual Basic para aplicaciones cuántos elementos pueden almacenarse en la matriz. Sin embargo, puede crear una matriz que cambia de tamaño durante la ejecución del programa. Una matriz que cambia de tamaño durante la ejecución del programa se conoce como una matriz dinámica.

Declarar una matriz fija

Cuando declara una matriz, debe especificar el nombre de la matriz, el tamaño de la matriz y tipo de datos que se almacena en la matriz. Ésta es la sintaxis predeterminada para declarar una matriz:
Dim <array name> (# of elements - 1) As <data type>

Por ejemplo, si tiene una matriz debe tener 10 valores enteros, crear la matriz con la siguiente instrucción:
Dim MyArray(9) As Integer
Nota Dimensión de la matriz con 9. Se supone que el primer número de índice en la matriz es cero. Por lo tanto, para tener acceso el primer elemento de la matriz, utilice la siguiente sintaxis:
MsgBox MyArray(0)

La ubicación de la línea donde se declara la matriz afecta a la del ámbito de la matriz y la duración de la matriz.

Pruebe este ejercicio:
  1. Insertar un nuevo módulo en el proyecto.
  2. Agregue el siguiente código al módulo:
    Sub Array_Example()
    'Create an array that has a total of three elements.
    Dim MyArray(2) As Integer 
    'Fill in the array with some values.
    MyArray(0) = 100
    MyArray(1) = 300
    MyArray(2) = 500
    MsgBox "First element= " & Myarray(0) & _
    " Second element= "& MyArray(1) & _
    " Third element= " & MyArray(2)
    End Sub
    
  3. Ejecute la macro Array_Example. Aparecerá un mensaje similar al siguiente:

    Primer elemento = 100 elemento Second = 300 tercer elemento = 500
  4. Haga clic en Aceptar para cerrar el mensaje.

Cambiar el primer número de índice de la matriz

Si no desea que el primer número de índice para las matrices es cero, o bien puede agregar una línea adicional que utiliza la instrucción Option Base al módulo o dimensión de la matriz mediante una sintaxis ligeramente diferente.

La instrucción Option Base

Puede agregar la instrucción Option Base en la parte superior del módulo para especificar el índice predeterminado para el primer elemento de las matrices en el módulo. El valor que especifique sólo puede ser cero o uno.

Pruebe este ejercicio:
  1. Modificar el módulo que contiene la macro Array_Example al siguiente:
    Option Base 1
    Sub Array_Example()
    'Create an array that has a total of two elements.
    Dim MyArray(2) As Integer 
    'Fill in the array with some values.
    MyArray(1) = 200
    MyArray(2) = 400
    MsgBox "First element= " & Myarray(1) & _
    " Second element= "& MyArray(2) 
    End Sub
    
  2. Ejecute la macro Array_Example. Aparecerá un mensaje similar al siguiente:
    Primer elemento = 200 elemento Second = 400
  3. Haga clic en Aceptar para cerrar el mensaje.
Nota Debe tener cuidado con el índice predeterminado para las matrices. Es un error común que asuma que el tamaño de la matriz coincide con el número que se especifica en la línea donde ajusta la matriz.

El índice superior y el índice inferior de una matriz de dimensiones

Hay otra forma a la matriz de dimensión. Puede utilizar una segunda sintaxis que utiliza dos números para especificar los índices de la matriz.

Pruebe este ejercicio:
  1. Agregue el código siguiente al módulo que contiene la macro Array_Example:

    Nota Deje la instrucción Option Base del ejemplo anterior en el módulo.
    Sub Array_Example_2()
    'Create an array with two elements with indexes 3 and 4.
    Dim NewArray(3 to 4) As Integer
    'Fill in the array with some values.
    NewArray(3) = 50
    NewArray(4) = 60
    MsgBox "First element= " & NewArray(3) & _
       " Second element= " & NewArray(4)
    End Sub
  2. Ejecute la macro Array_Example_2. Reciba el siguiente mensaje similar al siguiente:
    Primer elemento = 50 elemento Second = 60
  3. Haga clic en Aceptar para cerrar el mensaje.

Determinar los límites de matriz

Puede determinar el límite superior y el límite inferior de una matriz mediante la función UBound y la función LBound, respectivamente. El límite de inferior predeterminado para cualquier matriz es cero o una función de cómo utiliza la instrucción Option Base. Sin embargo, como en un ejemplo anterior, puede establecer el límite inferior de una matriz a algo distinto de cero o uno. Si hace esto, debe utilizar la función LBound y la función UBound para determinar los límites de matriz.

Pruebe este ejercicio:
  1. Cambiar la macro Array_Example_2 del ejemplo anterior a la siguiente:
    Sub Array_Example_3()
    'Create an array with three elements with indexes 2 through 4.
    Dim NewArray(2 to 4) As Integer
    'Fill in the array with some values.
    NewArray(2) = 40
    NewArray(3) = 50
    NewArray(4) = 60
    MsgBox "Lowest array index is " & LBound(NewArray) & _
         " and Highest array index is " & UBound(NewArray)
    End Sub
    
  2. Ejecute la macro Array_Example_3. Aparecerá un mensaje similar al siguiente:
    Índice de matriz inferior es 2 y mayor índice de matriz es 4
Nota El mensaje muestra los números de índice en lugar de los valores que se almacenan en la matriz.

Matrices multidimensionales

En Visual Basic para aplicaciones, las matrices pueden tener hasta 60 dimensiones. El ejemplo más sencillo de una matriz multidimensional es una matriz bidimensional. Una matriz bidimensional puede tratarse como una tabla varias columnas en una hoja de cálculo.

Declarar una matriz multidimensional

Para declarar una matriz multidimensional, utilice la sintaxis predeterminada:
Dim <array name>(r, c) As <data type>

Esta sintaxis utiliza el valor que haya establecido con la instrucción base opciones como el límite inferior de cada dimensión. (Esta sintaxis utiliza cero si no utiliza Option Base.) También puede utilizar lo siguiente:
Dim <array name>(1 to r , 1 to c) As <data type>

Esta sintaxis tiene un límite inferior de uno para cada dimensión de la matriz.

Cualquier sintaxis creará una matriz bidimensional que tiene r filas y columnas de c. Si utiliza la primera sintaxis, el número de elementos de cada dimensión se varía según la configuración de Option Base.

Si usa la siguiente declaración de ejemplo para una matriz, cree una matriz de tres filas por dos columnas que es similar al rango a1: B3 de una hoja de cálculo de Microsoft Excel:
Dim MyArray(1 to 3, 1 to 2) As Integer



Pruebe este ejercicio:
  1. Inicie Excel y, a continuación, abra un nuevo libro.
  2. Inicie el Editor de Visual Basic y, a continuación, insertar un nuevo módulo en el proyecto.
  3. Escriba el siguiente código en este módulo:
    Option Base 1
    Sub Multi_Array()
    'Create a 3-row-by-2-column array.
    Dim MyArray(3, 2) As Integer
    MyArray(1,1) = 11    'first row, first column
    MyArray(1,2) = 12    'first row, second column
    MyArray(2,1) = 21    'second row, first column
    MyArray(2,2) = 22    'second row, second column
    MyArray(3,1) = 31    'third row, first column
    MyArray(3,2) = 32    'third row, second column
    Sheet1.Range("A1").Value = MyArray(1,1)
    Sheet1.Range("B1").Value = MyArray(1,2)
    Sheet1.Range("A2").Value = MyArray(2,1)
    Sheet1.Range("B2").Value = MyArray(2,2)
    Sheet1.Range("A3").Value = MyArray(3,1)
    Sheet1.Range("B3").Value = MyArray(3,2)
    End Sub
    
  4. Ejecute la macro Multi_Array.
  5. Devolver el foco a Excel presionando ALT + F11.

El rango a1: B3 se rellenará con el contenido de la matriz.

Matrices dinámicas

Puede declarar una matriz para que puedan ser aumenta o disminuye mientras se ejecuta la macro las dimensiones de la matriz. Sin embargo, el contenido de la matriz se perderán cuando redimensionar la matriz.

Declarar una matriz dinámica

Para declarar una matriz como una matriz dinámica, utilice la sintaxis siguiente:
Dim <array name>() As <data type>

Nota No se especificó ningún tamaño para la matriz cuando declara una matriz dinámica.

Pruebe este ejercicio:
  1. Insertar un nuevo módulo en el proyecto.
  2. Escriba el siguiente código en este módulo:
    Option Base 1
    Sub Dynamic_Array()
    'Create a dynamic array.
    Dim  MyArray() As Integer
    'Redimension the array to two elements.
    ReDim MyArray(2)
    'Populate the array elements.
    MyArray(1) = 1
    MyArray(2) = 2
    MsgBox "First element= " & MyArray(1) & _
    " Second element= " & MyArray(2)
    'Redimension the array to three elements.
    'The contents of the array are lost.
    ReDim MyArray(3)
    MyArray(3) = 3
    MsgBox "First element= " & MyArray(1) & _
    " Second element= " & MyArray(2) & _
    " Third element= " & MyArray(3)
    End Sub
    
  3. Ejecute la macro Dynamic_Array. Aparecerá un mensaje similar al siguiente:

    Primer elemento = 1 segundo elemento = 2
  4. Haga clic en Aceptar para cerrar el primer mensaje. Aparecerá un mensaje similar al siguiente:

    Primer elemento = 0 segundo elemento = 0 elemento tercer = 3
  5. Haga clic en Aceptar para cerrar el mensaje.
El segundo mensaje muestra valores de cero para el primer elemento y el segundo elemento debido a la segunda instrucción ReDim borra el contenido de la matriz.

Conservar el contenido de la matriz con matriz redimensioned

Cuando utiliza la instrucción ReDim para redimensionar una matriz, el contenido de la matriz se pierden. Esto es aceptable, siempre que sepa sobre él cuando está desarrollando la macro. Si desea conservar el contenido de la matriz cuando redimensionar, utilice la palabra clave Preserve junto con el ReDim instrucción.

Pruebe este ejercicio:
  1. Cambie la segunda instrucción ReDim en la macro Dynamic_Array de manera que la macro es similar al siguiente:
    Option Base 1
    Sub Dynamic_Array()
    'Create a dynamic array.
    Dim  MyArray() As Integer
    'Redimension the array to two elements.
    ReDim MyArray(2)
    'Populate the array elements.
    MyArray(1) = 1
    MyArray(2) = 2
    MsgBox "First element= " & MyArray(1) & _
    " Second element= " & MyArray(2)
    'Redimension the array to three elements.
    
    'The contents of the array are not lost when you use the Preserve keyword.
    
    ReDim Preserve MyArray(3)
    MyArray(3) = 3
    MsgBox "First element= " & MyArray(1) & _
    " Second element= " & MyArray(2) & _
    " Third element= " & MyArray(3)
    End Sub
  2. Ejecute la macro Dynamic_Array. Aparecerá un mensaje similar al siguiente:

    Primer elemento = 1 segundo elemento = 2
  3. Haga clic en Aceptar para cerrar el primer mensaje. Aparecerá un mensaje similar al siguiente:

    Primer elemento = 1 segundo elemento = elemento tercer 2 = 3
  4. Haga clic en Aceptar para cerrar el mensaje.
El segundo mensaje muestra los valores mismos como el primer mensaje. Este comportamiento se produce porque la palabra clave Preserve se utiliza con la instrucción ReDim.

Nota Cuando se utiliza la palabra clave Preserve con una matriz dinámica, sólo puede cambiar el límite superior de la última dimensión de la matriz y no se puede cambiar el número de dimensiones de la matriz.

Rellenar una matriz con datos de la hoja de cálculo

Tomar datos de una hoja de cálculo y colocarlo en una matriz es un uso común de matrices en Visual Basic para aplicaciones. Si rellena una matriz de datos de la hoja de cálculo, puede hacer cosas como ordenar los datos, realizar un análisis numérico en los datos o exportar los datos.

Variable de variante que contiene una matriz

Si desea transferir datos desde un rango de celdas en una hoja de cálculo a una matriz, puede recorrer en iteración las celdas y llenar cada elemento de la matriz con el valor de celda cada vez a través del bucle, o puede asignar directamente el intervalo a la matriz. El último método es más rápido. Sin embargo, la matriz que está pasando el rango de celdas a realmente es una variable Variant que contiene una matriz.

Para obtener información adicional acerca de bucles, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
843146Descripción de sub-procedures de Excel para Windows en Visual Basic para aplicaciones (estructuras de control)


Nota Una variable Variant que contiene una matriz es diferente de una variable de matriz que contiene elementos de tipo variant. Tenga cuidado cuando se trabaja con matrices unidimensionales.

Pruebe este ejercicio:
  1. Guarde y cierre todos los libros abiertos y, a continuación, abra un nuevo libro.
  2. Escriba lo siguiente en la Hoja1:
    Contraer esta tablaAmpliar esta tabla
    A1:1
    A2:2
    A3:3
  3. Inicie el Editor de Visual Basic y, a continuación, inserte un módulo.
  4. Escriba el siguiente código en el módulo:
    Option Base 1
    Sub Array_from_sheet_data()
    'Create a Variant variable.
    Dim MyArray As Variant
    'Assign the range A1:A3 to the Variant variable.
    MyArray = Sheet1.Range("A1:A3").Value
    MsgBox  "Cell A1 is: " & MyArray(1,1) & _
    " Cell A2 is: " & MyArray(2,1) & _
    " Cell A3 is: " & MyArray(3,1)
    End Sub
    
  5. Ejecute la macro Array_from_sheet_data. Aparecerá un mensaje similar al siguiente:

    La celda A1 es 1 celda A2 2 celda A3 es 3
  6. Haga clic en Aceptar para cerrar el mensaje.
Nota Las referencias a los elementos de MyArray utilizar el índice de fila y el índice de columna, aunque los datos de una sola columna. Los datos de columna único significan que esta matriz es una matriz unidimensional. La variable MyArray no es realmente una matriz. En su lugar, la variable de MyArray es un valor Variant que contiene una matriz. Por lo tanto, debe utilizar los índices de fila y los índices de columna cuando se hace referencia este tipo de matriz.

Referencias

Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
843146Procedimientos Sub de Excel para Windows en Visual Basic para aplicaciones (estructuras de control)
843144Cómo utilizar variables en procedimientos Sub de Excel en Visual Basic para aplicaciones

Propiedades

Id. de artículo: 843145 - Última revisión: martes, 13 de febrero de 2007 - Versión: 1.5
La información de este artículo se refiere a:
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Palabras clave: 
kbmt kbhowto kbprogramming kbvba kbinfo KB843145 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 843145

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com