Array in Visual Basic per Applicazioni

Arrays in Visual Basic per l'Applicazione sò strutture chì tipicamente almacenanu setti di variàbili cunnessi di u listessu tipu. L'entrata di l'array sò accessu da u so indice numericu.

Per esempiu, ci hè una squadra di 20 persone chì i nomi deve esse salvatu per u usu dopu in u codice VBA. Puderia solu dichjarà 20 variàbili per mantene ogni nome, cusì:

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Ma pudete aduprà un modu assai più simplice è più urganizatu - almacenà una lista di i nomi di i membri di l'equipa in una matrice di 20 variabili cum'è String:

Dim Team_Members (1 à 20) As String

In a linea mostrata sopra, avemu dichjaratu un array. Avà scrivemu un valore à ognunu di i so elementi, cum'è questu:

Team_Members (1) = "John Smith"

Un vantaghju supplementu di almacenà e dati in un array, cumparatu cù l'usu di variàbili separati, diventa evidenti quandu hè necessariu di fà a listessa azione nantu à ogni elementu di l'array. Se i nomi di i membri di l'equipa sò stati guardati in 20 variàbili separati, allora ci vole 20 linee di codice per scrive ogni volta per fà a stessa azzione nantu à ognunu. In ogni casu, se i nomi sò guardati in un array, pudete fà l'azzione desiderata cù ognuna di elli cù un ciclu simplice.

Cumu funziona hè dimustratu quì sottu cù un esempiu di codice chì stampa i nomi di ogni membru di a squadra in sequenza in e cellule di colonna. A fogliu di travagliu Excel attivu.

Per i = 1 à 20 Cells (i,1).Value = Team_Members (i) Next i

Ovviamente, travaglià cù un array chì guarda 20 nomi hè assai menu ingombrante è più precisu cà l'usu di 20 variàbili separati. Ma chì sì sti nomi ùn sò micca 20, ma 1000? E se, in più, hè necessariu di mantene i cognomi è i patronimici separatamente ?! Hè chjaru chì prestu diventerà cumplitamenti impussibile di trattà tali volumi di dati in codice VBA senza l'aiutu di un array.

Array multidimensionali in Excel Visual Basic

L'arrays Visual Basic discututi sopra sò cunsiderate unidimensionali. Questu significa chì guardanu una lista simplice di nomi. Tuttavia, i matrici ponu avè parechje dimensioni. Per esempiu, un array bidimensionale pò esse paragunatu à una griglia di valori.

Diciamu chì vulete salvà i figuri di vendita di ogni ghjornu per ghjennaghju per 5 squadre diverse. Questu averebbe bisognu di un array bidimensionale custituitu da 5 sets di metriche per 31 ghjorni. Dichjaremu un array cum'è questu:

Dim Jan_Sales_Figures(1 To 31, 1 To 5) As Currency

Per accede à l'elementi di array Jan_Sales_Figures, avete bisognu di utilizà dui indici chì indicanu u ghjornu di u mese è u numeru di cumandamentu. Per esempiu, l'indirizzu di un elementu chì cuntene i figuri di vendita per 2-oh squadre per 15 è Ghjennaghju seria scrittu cusì:

Figure_di_vendita_di_ghjennaghju (15, 2)

In u listessu modu, pudete dichjarà un array cù 3 o più dimensioni - solu aghjunghje dimensioni supplementari à a dichjarazione di array è utilizate indici supplementari per riferite à l'elementi di sta matrice.

Dichjarà Arrays in Excel Visual Basic

Prima in questu articulu, avemu digià guardatu parechji esempi di dichjarazione di arrays in VBA, ma questu tema merita un sguardu più vicinu. Comu mostra, un array unidimensionale pò esse dichjaratu cusì:

Dim Team_Members (1 à 20) As String

Una tale dichjarazione dice à u compilatore VBA chì l'array Team_Members hè custituitu di 20 variàbili chì ponu accede à l'indici da 1 à 20. In ogni casu, pudemu pensà à numerate e nostre variàbili di array da 0 à 19, in quale casu l'array deve esse dichjaratu cusì:

Dim Team_Members (0 à 19) As String

In fattu, per difettu, a numerazione di l'elementi di l'array principia da 0, è in a dichjarazione di l'array, l'indici iniziale ùn pò micca esse specificatu in tuttu, cusì:

Dim Team_Members (19) As String

U compilatore VBA trattarà una tale entrata cum'è dichjarà un array di elementi 20 cù indici da 0 à 19.

E stesse regule s'applicanu quandu si dichjaranu arrays Visual Basic multidimensionali. Comu digià mostratu in unu di l'esempii, quandu si dichjarà un array bidimensionale, l'indici di e so dimensioni sò siparati da una virgola:

Dim Jan_Sales_Figures(1 To 31, 1 To 5) As Currency

Tuttavia, se ùn specificate micca un indice di partenza per e duie dimensioni di u array è dichjarà cusì cusì:

Dim Jan_Sales_Figures(31, 5) As Currency

Allora sta entrata serà trattata cum'è una matrice bidimensionale, a prima dimensione di quale cuntene 32 elementi cù indici da 0 à 31, è a seconda dimensione di l'array cuntene 6 elementi cù indici da 0 à 5.

Matrici dinamichi

Tutti l'array in l'esempii sopra anu un numeru fissu di dimensioni. Tuttavia, in parechji casi ùn sapemu micca in anticipu chì dimensione deve esse u nostru array. Pudemu esce da a situazione dichjarà una grande matrice, a dimensione di quale serà certamente più grande di ciò chì hè necessariu per u nostru compitu. Ma una tale suluzione necessitarà assai memoria extra è pò rallentà u prugramma. Ci hè una suluzione megliu. Pudemu aduprà un array dinamicu - questu hè un array chì a so dimensione pò esse stabilita è cambiata ogni quantità di volte durante l'esekzione di una macro.

Un array dinamicu hè dichjaratu cù parentesi vacanti, cum'è questu:

Dim Team_Members() As String

In seguitu, avete bisognu di dichjarà a dimensione di l'array durante l'esekzione di codice utilizendu l'espressione ReDim:

ReDim Team_Members (da 1 à 20)

È se durante l'esekzione di u codice avete bisognu di cambià a dimensione di l'array di novu, pudete aduprà l'espressione ReDim di novu:

Se Team_Size> 20 Allora ReDim Team_Members (1 To Team_Size) Fine If

Tenite in mente chì u ridimensionamentu di una matrice dinamica in questu modu hà da risultatu in a perdita di tutti i valori almacenati in a matrice. Per almacenà e dati digià in l'array, avete bisognu di utilizà a keyword Preservàquì sottu:

Se Team_Size> 20 Allora ReDim Preserve Team_Members (1 To Team_Size) End If

Sfurtunatamente a keyword Preservà pò esse usatu solu per cambià u limite superiore di una dimensione array. U limite inferiore di un array ùn pò micca esse cambiatu in questu modu. Inoltre, se l'array hà parechje dimensioni, allora usendu a keyword Preservà, solu l'ultima dimensione di l'array pò esse ridimensionata.

Lascia un Audiolibro