MATRICES (Arrays)

Si bien las variables sólo nos sirven para almacenar un único valor, las matrices posibilitan el almacenamiento de muchos valores y operan casi exactamente de la mismo modo.

Vea unos ejemplos de declaraciones:

'Ejemplo: declaración de variables
Dim var1 As String
    
'Ejemplo: declaración unidimensional de matriz
Dim matriz1(4) As String
    
'Ejemplo: declaración de matriz de 2 dimensiones
Dim matriz2(43) As String
    
'Ejemplo: declaración de matriz de 3 dimeciones
Dim matriz3(432) As String

La matriz de una dimensión:

'Ejemplo:declaración de matrix de 1 dimención
Dim matriz1(4) As String

Con esta declaración solo tenemos un número entre paréntesis, es decir que se trata de una matriz unidimensional. El número establece el tamaño de la matriz. matriz1(4) es una matriz donde las celdas se numeran de 0 a 4, que significa un array con 5 celdas:

'Asignando valores a 5 celdas
matriz1(0) = "valor de celda 0"
matriz1(1) = "valor de celda 1"
matriz1(2) = "valor de celda 2"
matriz1(3) = "valor de celda 3"
matriz1(4) = "valor de celda 4"

Importante: la primera celda de una matriz debe tener el valor 0.

Este es un ejemplo de como se puede elegir cualquier valor de la celda en función de otros valores, utilizando un bucle "do while" imprimimos los valores de la matriz, así mismo le damos color en función del valor del bucle, no es necesario saber por ahora, en las siguientes publicaciones se explicará sobre condicionales y bucles :

Sub AsignarValor()
'Declarando matriz unidimencional 
    Dim número(5) As String
'Asignando valores  
    número(0) = "valor( 0)"
    número(1) = "valor( 1)"
    número(2) = "valor( 2)"
    número(3) = "valor( 3)"
    número(4) = "valor( 4)"
    número(5) = "valor( 5)"
'Declarando variable num
Dim num As Integer
Do While num < 6
    num = num + 1
    Cells(num1) = número(num - 1)
    Cells(num1).Interior.ColorIndex = num
    Cells(num1).Font.ColorIndex = num + 1
Loop

End Sub

Se imprimirán los valores de la matriz en sentido de la flecha:  

También se puede sustituir al bucle do while por un bucle for, para que de los valores en una ventana emergente.

'Opción 2 , antes borrar desde do while hasta loop
For i = 0 To 5
     MsgBox número(i)
Next

Otro ejemplo, una matriz bidimensional:

'Declaración de matriz de 2 dimenciones
Dim número(35) As String


'Asignando valores a 3 celdas de color
número(23) = "Rojo"
número(24) = "Verde"
número(25) = "azul"

Para graficar la imagen anterior puedes utilizar esto, en ciclos mas adelante veremos  información sobre que debemos hacer para no repetir variables...

Option Explicit

Sub num_matriz()

    'Delcarando matriz 3x5
    Dim número(35) As String   
número(00) = "valor(0-0)"
número(01) = "valor(0-1)"
número(02) = "valor(0-2)"
número(03) = "valor(0-3)"
número(04) = "valor(0-4)"
número(05) = "valor(0-5)"

número(10) = "valor(1-0)"
número(11) = "valor(1-1)"
número(12) = "valor(1-2)"
número(13) = "valor(1-3)"
número(14) = "valor(1-4)"
número(15) = "valor(1-5)"

número(20) = "valor(2-0)"
número(21) = "valor(2-1)"
número(22) = "valor(2-2)"
número(23) = "valor(2-3)"
número(24) = "valor(2-4)"
número(25) = "valor(2-5)"

número(30) = "valor(3-0)"
número(31) = "valor(3-1)"
número(32) = "valor(3-2)"
número(33) = "valor(3-3)"
número(34) = "valor(3-4)"
número(35) = "valor(3-5)"

'Declarando variables a,b : imprime matriz
Dim a As Integer
Dim b As Integer
Do While a < 3
    a = a + 1
    For b = 1 To 5
        Cells(a, b) = número(a, b)
        Cells(a, b).Interior.ColorIndex = 50
        Cells(a, b).Font.ColorIndex = 28
    Next
Loop

'Declarando variable i , para colores: ROJO,VERDE,AZUL
Dim i As Integer
For i = 3 To 5
    Cells(2, i).Interior.ColorIndex = i
Next

End Sub

CONSTANTES

Al igual que las variables, las constantes pueden utilizarse para almacenar valores, pero la diferencia es que no se pueden modificar (de ahí su nombre).

Por ejemplo, podríamos añadir una constante para evitar tener que repetir un número como 2,718281828459:

Sub no_const_ejemplo()
    Cells(11) = Cells(12) * 2.718281828459
    Cells(21) = Cells(22) * 2.718281828459
    Cells(31) = Cells(32) * 2.718281828459
    Cells(41) = Cells(42) * 2.718281828459
    Cells(51) = Cells(52) * 2.718281828459
End Sub

Esto hace que el código sea mucho más fácil de leer (las partes importantes en particular) y hace que sea mucho más fácil cambiar el valor de la constante, en caso de necesitarlo:

Sub const_ejemplo()
   'Declaración de una constante + asignación de valor 
    Const Constante_1 As Double = 2.718281828459

    Cells(11) = Cells(12) * Constante_1
    Cells(21) = Cells(22) * Constante_1
    Cells(31) = Cells(32) * Constante_1
    Cells(41) = Cells(42) * Constante_1
    Cells(51) = Cells(52) * Constante_1
End Sub

EL CAMPO DE LAS VARIABLES

Al declarar una variable al iniciar un procedimiento (Sub), ésta sólo podrá ser utilizada al interior de este mismo procedimiento. El valor de la variable no se conservará luego de la ejecución del procedimiento, no se ejecutará en otros "sub".

Sub procedimiento_1()
   Dim var1 As Integer
   ' => Empleo de una variable tan solo en el interior de un procedimiento
End Sub

Sub procedimiento_2()
   ' => var1 no puede utilizarse aquí
End Sub

Si desea utilizar una variable en alguno de los procedimientos de un módulo, sólo debe declararla al principio del módulo. Y si declaras una variable de este modo, su valor se conservará hasta que cierres el libro de trabajo.

Dim var1 As Integer

Sub procedimiento_1()
   ' => var1 se puede utilizar aquí
End Sub

Sub procedimiento_2()
   ' => var1 también se puede utilizar aquí
End Sub

Para poder usar una variable en cualquier módulo, en el mismo principio que el ejemplo anterior, sólo tienes que sustituir Dim por Global:

Global var1 As Integer

Para conservar el valor de una variable después de la ejecución del procedimiento en el que aparece, sustituya Dim por Static:

Sub procedimiento_1()
    Static var1 As Integer
End Sub

Para conservar los valores de todas las variables de un procedimiento, agrega Static antes de Sub:

Static Sub procedimiento_1()
    Dim var1 As Integer
End Sub

CREAR SU PROPIO TIPO DE VARIABLE

No dedicaremos mucho tiempo a este tema. Veamos un ejemplo:

'Creación de un tipo de variable
Type guests
    apellido As String
    nombre As String
End Type

Sub variables()
    'Declaración
    Dim p1 As guests
    
    'Para asignar valores a p1
    p1.apellido = "mi apellido"
    p1.nombre = "mi nombre"
    
    'Ejemplo de uso
    MsgBox p1.apellido & " " & p1.nombre
End Sub