Questo tutorial dimostrerà come ordinare i valori in un array in VBA
Ordinamento di un array unidimensionale utilizzando un ciclo
L'ordinamento di un array richiede un po' di manipolazione dei dati utilizzando loop, variabili e array temporanei.
- Per prima cosa devi popolare l'array con i tuoi valori
- È quindi necessario eseguire il ciclo dell'array due volte! Una volta per ottenere un valore dall'array di elementi corrente e mentre è ancora in quel ciclo, per ottenere il valore dell'elemento successivo nell'array.
- È quindi necessario confrontare gli elementi e spostare il 2° nella posizione del primo se il 2° è in ordine alfabetico PRIMA del 1°.
L'esempio seguente mostra questa procedura.
1234567891011121314151617181920212223 | Sub SortAnArray()Dim I As Long'Imposta l'arrayDim strName() come varianteDim Temp come variante'popola l'arraystrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'passa attraverso il limite dell'arry e prendi il nomePer i = LBound(strName) a UBound(strName) - 1'ripeti e controlla se il nome successivo è in ordine alfabetico prima o dopo l'originalePer j = i + 1 a UBound(strName)If UCase(strName(i)) > UCase(strName(j)) Then'se il nome deve essere spostato prima del nome precedente, aggiungilo a un array temporaneoTemp = strName(j)'scambiate i nomistrNome(j) = strNome(i)strName(i) = TempFinisci seAvanti jAvanti io'Emetti l'array tramite una finestra di messaggioMsgBox Join(strName(), vbCrLf)Fine sottotitolo |
Se esegui questa procedura, otterrai la seguente finestra di messaggio.
Puoi anche ordinare l'array nell'altra direzione, ad esempio: da Z ad A cambiando questa riga di codice
1 | If UCase(strName(i)) > UCase(strName(j)) Then |
a questa riga di codice
1 | Se UCase(strName(i)) < UCase(strName(j)) Then |
Si otterrebbe quindi la seguente finestra di messaggio.