Instrucción ReDim (Visual Basic)ReDim Statement (Visual Basic)

Reasigna espacio de almacenamiento a una variable de matriz.Reallocates storage space for an array variable.

SintaxisSyntax

ReDim [ Preserve ] name(boundlist) [ ,  name(boundlist) [, ... ] ]  

ElementosParts

TérminoTerm DefiniciónDefinition
Preserve Opcional.Optional. Modificador usado para mantener los datos en la matriz existente cuando cambia el tamaño solamente de la última dimensión.Modifier used to preserve the data in the existing array when you change the size of only the last dimension.
name Obligatorio.Required. Nombre de la variable de matriz.Name of the array variable. Vea Declared Element Names.See Declared Element Names.
boundlist Obligatorio.Required. Lista de límites de cada dimensión de la matriz redefinida.List of bounds of each dimension of the redefined array.

ComentariosRemarks

Puede utilizar la instrucción ReDim para cambiar el tamaño de una o más dimensiones de una matriz que ya se ha declarado.You can use the ReDim statement to change the size of one or more dimensions of an array that has already been declared. Si tiene una matriz grande y ya no necesita algunos de sus elementos, ReDim puede liberar memoria al reducir el tamaño de la matriz.If you have a large array and you no longer need some of its elements, ReDim can free up memory by reducing the array size. Por otro lado, si la matriz necesita más elementos, ReDim puede agregarlos.On the other hand, if your array needs more elements, ReDim can add them.

La instrucción ReDim está destinada solo a las matrices.The ReDim statement is intended only for arrays. No es válida en escalares (variables que contienen un único valor), colecciones ni estructuras.It's not valid on scalars (variables that contain only a single value), collections, or structures. Tenga en cuenta que, si declara una variable de tipo Array, la instrucción ReDim no tiene suficiente información de tipo para crear la nueva matriz.Note that if you declare a variable to be of type Array, the ReDim statement doesn't have sufficient type information to create the new array.

Solo puede usar ReDim en el nivel de procedimiento.You can use ReDim only at procedure level. Por lo tanto, el contexto de declaración de la variable debe ser un procedimiento; no puede ser un archivo de código fuente, un espacio de nombres, una interfaz, una clase, una estructura, un módulo o un bloque.Therefore, the declaration context for the variable must be a procedure; it can't be a source file, a namespace, an interface, a class, a structure, a module, or a block. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).For more information, see Declaration Contexts and Default Access Levels.

ReglasRules

  • Varias variables.Multiple Variables. Puede cambiar el tamaño de varias variables de matriz en la misma instrucción de declaración y especificar las partes name y boundlist de cada variable.You can resize several array variables in the same declaration statement and specify the name and boundlist parts for each variable. Las variables se separan con comas.Multiple variables are separated by commas.

  • Límites de matriz.Array Bounds. Cada entrada de boundlist puede especificar los límites inferior y superior de esa dimensión.Each entry in boundlist can specify the lower and upper bounds of that dimension. El límite inferior es siempre 0 (cero).The lower bound is always 0 (zero). El límite superior es el valor de índice posible más alto para esa dimensión, no la longitud de la dimensión (que es el límite superior más uno).The upper bound is the highest possible index value for that dimension, not the length of the dimension (which is the upper bound plus one). El índice de cada dimensión puede variar entre 0 y el valor del límite superior.The index for each dimension can vary from 0 through its upper bound value.

    El número de dimensiones de boundlist debe coincidir con el número de dimensiones (rango) de la matriz original.The number of dimensions in boundlist must match the original number of dimensions (rank) of the array.

  • Tipos de datos.Data Types. La instrucción ReDim no puede cambiar el tipo de datos de una variable de matriz o sus elementos.The ReDim statement cannot change the data type of an array variable or its elements.

  • Inicial.Initialization. La instrucción ReDim no puede proporcionar nuevos valores de inicialización para los elementos de la matriz.The ReDim statement cannot provide new initialization values for the array elements.

  • Criterios.Rank. La instrucción ReDim no puede cambiar el rango (número de dimensiones) de la matriz.The ReDim statement cannot change the rank (the number of dimensions) of the array.

  • Cambio de tamaño con Preserve.Resizing with Preserve. Si utiliza Preserve, solo podrá cambiar el tamaño de la última dimensión de la matriz.If you use Preserve, you can resize only the last dimension of the array. Para cualquier otra dimensión, debe especificar el límite de la matriz existente.For every other dimension, you must specify the bound of the existing array.

    Por ejemplo, si su matriz tiene solo una dimensión, puede cambiar el tamaño de esa dimensión y conservar todo el contenido de la matriz, ya que es la última y única dimensión.For example, if your array has only one dimension, you can resize that dimension and still preserve all the contents of the array, because you are changing the last and only dimension. Sin embargo, si su matriz tiene dos o más dimensiones, puede cambiar solamente el tamaño de la última dimensión si utiliza Preserve.However, if your array has two or more dimensions, you can change the size of only the last dimension if you use Preserve.

  • Propiedades.Properties. Puede usar ReDim en una propiedad que contiene una matriz de valores.You can use ReDim on a property that holds an array of values.

ComportamientoBehavior

  • Reemplazo de matriz.Array Replacement. ReDim libera la matriz existente y crea una nueva matriz con el mismo rango.ReDim releases the existing array and creates a new array with the same rank. La nueva matriz reemplaza la matriz liberada en la variable de matriz.The new array replaces the released array in the array variable.

  • Inicialización sin Preserve.Initialization without Preserve. Si no se especifica Preserve, ReDim inicializa los elementos de la nueva matriz utilizando el valor predeterminado para su tipo de datos.If you do not specify Preserve, ReDim initializes the elements of the new array by using the default value for their data type.

  • Inicialización con Preserve.Initialization with Preserve. Si especifica Preserve, Visual Basic copia los elementos de la matriz existente en la nueva matriz.If you specify Preserve, Visual Basic copies the elements from the existing array to the new array.

EjemploExample

El ejemplo siguiente aumenta el tamaño de la última dimensión de una matriz dinámica sin perder los datos existentes en la matriz y, a continuación, reduce el tamaño con pérdida de datos parcial.The following example increases the size of the last dimension of a dynamic array without losing any existing data in the array, and then decreases the size with partial data loss. Por último, reduce el tamaño a su valor original y reinicializa todos los elementos de la matriz.Finally, it decreases the size back to its original value and reinitializes all the array elements.

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

La instrucción Dim crea una nueva matriz con tres dimensiones.The Dim statement creates a new array with three dimensions. Cada dimensión se declara con un límite de 10, por lo que el índice de matriz para cada dimensión puede oscilar entre 0 y 10.Each dimension is declared with a bound of 10, so the array index for each dimension can range from 0 through 10. En el siguiente análisis, las tres dimensiones se conocen como capa, fila y columna.In the following discussion, the three dimensions are referred to as layer, row, and column.

El primer ReDim crea una nueva matriz que reemplaza la matriz existente en la variable intArray.The first ReDim creates a new array which replaces the existing array in variable intArray. ReDim copia todos los elementos de la matriz existente en la nueva matriz.ReDim copies all the elements from the existing array into the new array. También agrega 10 columnas más al final de cada fila en cada capa e inicializa los elementos de estas nuevas columnas a 0 (el valor predeterminado de Integer, que es el tipo de elemento de la matriz).It also adds 10 more columns to the end of every row in every layer and initializes the elements in these new columns to 0 (the default value of Integer, which is the element type of the array).

El segundo ReDim crea otra nueva matriz y copia todos los elementos que quepan.The second ReDim creates another new array and copies all the elements that fit. Sin embargo, se pierden cinco columnas del final de cada fila en cada capa.However, five columns are lost from the end of every row in every layer. No es un problema si ya ha terminado de utilizar estas columnas.This is not a problem if you have finished using these columns. Reducir el tamaño de una matriz grande puede liberar memoria que ya no necesite.Reducing the size of a large array can free up memory that you no longer need.

El tercer ReDim crea otra nueva matriz y quita otras cinco columnas del final de cada fila en cada capa.The third ReDim creates another new array and removes another five columns from the end of every row in every layer. Esta vez no copia los elementos existentes.This time it does not copy any existing elements. Esta instrucción revierte la matriz a su tamaño original.This statement reverts the array to its original size. Dado que la instrucción no incluye el modificador Preserve, establece todos los elementos de matriz con sus valores predeterminados originales.Because the statement doesn't include the Preserve modifier, it sets all array elements to their original default values.

Para obtener más ejemplos, consulte matrices.For additional examples, see Arrays.

Vea tambiénSee also