vba mejor manera de establecer todos los valores en la matriz a la misma cosa

Esta es una cuestión de curiosidad personal.

En VBA, si tengo una matriz de tamaño 2:

Dim r(1) as Variant

Y quiero que ambos valores en la matriz sean -1. Puedo hacer esto:

r(0)=-1
r(1)=-1

O podría iterar a través de ambos con un bucle y establecerlos en -1.

Entonces mi pregunta es, ¿hay alguna forma de que pueda establecer todos los valores en una matriz de la misma manera sin iterar?

O, ¿hay alguna manera de que pueda hacer algo como:

r = array(-1,-1)

Esta podría ser una pregunta realmente estúpida, pero parece que no puedo encontrar la respuesta.

preguntado el 22 de mayo de 12 a las 16:05

-> ¿Por qué necesitaría establecer todos los valores de una matriz para que sean iguales? -

@Scott porque cambiaré algunos de ellos y quiero que el valor predeterminado sea -1. Nuevamente, tengo curiosidad por saber si hay mejores formas de hacer esto, porque puedo pensar en formas mucho mejores de hacerlo en otros idiomas (por ejemplo, matlab).

2 Respuestas

No soy muy bueno dibujando imágenes. Pero esto debería darle y aclarar los conceptos asociados con las matrices de variantes.

matriz de variantes frente a variantes

contestado el 22 de mayo de 12 a las 21:05

+ 1 por ir más allá :) - Huida de Siddharth

Sí, tú puedes hacerlo. Pero luego debes tener cuidado al declarar la matriz.

Ejemplo

Option Explicit

Sub Sample()
    Dim r As Variant '<~~

    r = Array(-1, -1)

    Debug.Print r(0)
    Debug.Print r(1)
End Sub

SEGUIMIENTO

Consulte el archivo de ayuda de Excel :) La función de matriz devuelve un Variant que contiene un array. No puede asignar una matriz a otra matriz directamente. Para asignar una matriz a otra matriz, debe usar este método.

Option Explicit

Sub Sample()
    Dim r(1) As Variant 
    Dim s As Variant
    Dim i As Long

    s = Array(-1, -1)

    For i = LBound(r) To UBound(r)
       r(i) = s(i)
    Next

    Debug.Print r(0)
    Debug.Print r(1)
End Sub

contestado el 22 de mayo de 12 a las 19:05

Esto funciona. ¡Gracias! Solo por curiosidad, ¿por qué no puedo declarar un arreglo r(1) como un Array(-1,-1) ? - Alec

Consulte el archivo de ayuda de Excel :) La función de matriz devuelve una variante que contiene una matriz. No puede asignar una matriz a otra matriz directamente. Ver publicación actualizada. - Huida de Siddharth

+1 Array() es una función y no una declaración. Toma cualquier número de elementos como su parámetro y devuelve una matriz de tipo variante que contiene esos elementos. Como tal, no puede declarar r(1) como Array(-1,-1). Debe declararlo como una variante (es decir, el tipo de datos devuelto por la función Array). - Pradeep Kumar

@Alec: Me confundí con tu último comentario. why can't I declare an array r(1) as an Array(-1,-1). Creo que su consulta ya ha sido respondida por sid, que no puede asignar una matriz a otra matriz directamente. - Pradeep Kumar

Esto es lo que todavía no entiendo: los dos tipos de matrices terminarán siendo EXACTAMENTE IGUALES. Ambos serán arrays de tipo 'variant/variant (0 to 1)', del mismo tamaño. En términos de cómo se ven en modo de depuración, son 100% exactamente iguales. Dado que son del mismo tipo de datos, ¿por qué no puedo asignar uno al otro? - Alec

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.