2014-07-05 72 views
5

Il Microsoft site suggerisce il seguente codice dovrebbe funzionare:Come inizializzare una variabile array multidimensionale in VBA per Excel

Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

Tuttavia ottengo un errore di complile quando cerco di usarlo in un modulo di Excel VBA. Il seguente funziona per un array 1D:

A = Array(1, 2, 3, 4, 5)

Comunque io non sono riuscito a trovare un modo di fare lo stesso per una matrice 2D. Qualche idea?

+0

nota che il codice della Microsoft del sito è in fase di inizializzazione di un array nidificato invece di un array multi-dim –

+0

Il collegamento su il sito Microsoft fa riferimento a "Visual Basic" anziché a "Visual Basic for Applications" – LeasMaps

risposta

6

Il sito Microsoft consiglia ...

Questo suggerimento per VB.NET, ma non VBA.

Per VBA siete nella giusta direzione. Si può fare:

Dim A as Variant 
A = Array(Array(1, 2), Array(3, 4), Array(5, 6)) 
+0

molte grazie Posso quindi accedere ai membri dell'array utilizzando X = A (1) (2) – user3807215

+0

In questo caso, come ottenere le diverse dimensioni? – Enissay

1

Quindi qui si genera l'array senza nulla su di esso, solo dicendo le sue dimensioni. La dimensione è X + 1 perché 0 conta come posizione nell'array.

Dim MyArray(X, X) As Integer 

Poi si riempie facendo per exemple

MyArray (0,0) = 1 
MyArray (0,1) = 2 
MyArray (1,0) = 3 
MyArray (1,1) = 4 

...

E così via.

Se si desidera un modo più pratico di riempirlo, è possibile utilizzare For Cycles se esiste una logica intrinseca ai numeri con cui si sta riempiendo.

11

È anche possibile utilizzare un formato abbreviato sfruttando la funzione Evaluate e un array statico. Nel codice riportato di seguito, varData è impostato dove [] è la scorciatoia per la funzione Evaluate e l'espressione {...} indica una matrice statica. Ogni riga è delimitata con un ; e ogni campo delimitato da ,. Essa si ottiene lo stesso risultato finale come codice di Simoco, ma con una sintassi più vicino alla tua domanda iniziale:

Sub ArrayShorthand() 

    Dim varData As Variant 
    Dim intCounter1 As Integer 
    Dim intCounter2 As Integer 

    ' set the array 
    varData = [{1, 2, 3; 4, 5, 6; 7, 8, 9}] 

    ' test 
    For intCounter1 = 1 To UBound(varData, 1) 
     For intCounter2 = 1 To UBound(varData, 2) 
      Debug.Print varData(intCounter1, intCounter2) 
     Next intCounter2 
    Next intCounter1 

End Sub 
+1

Questa è una risposta migliore di quella accettata perché crea un vero array bidimensionale a cui si accede usando la notazione standard 'varData (row, col)'. – ChaimG

Problemi correlati