După ce se încarcă informații în matrice dintr-o sursă externă, matricea trebuie sortată. Din păcate, VBA nu are o comandă încorporată pentru a sorta o matrice.
Sortarea este ușor de înțeles: se rearanjează lucrurile în ordinea dorită. De exemplu, elementele dintr-o matrice pot fi sortate în ordine alfabetică sau invers alfabetică, în ordine crescătoare sau descrescătoare.
Cu toate acestea, scrierea unui program de sortare este mult mai dificilă, deci nu se recomandă scrierea lui de către începători. Dar se pot copia exemple de pe Internet sau din exemplul următor.
Această secțiune arată o formă simplă de sortare, numită bubble sort. Sortarea constă din două bucle care compară două elemente din matrice; dacă cel de-al doilea element este mai sus în listă decât primul element, sortarea inversează pozițiile și comparațiile continuă până când întreaga listă este ordonată corect. Bubble sort este o metodă relativ ineficientă de sortare a obiectelor, dar este ușor de înțeles, iar procesoarele sunt rapide în aceste zile.
Acest exemplu vă introduce, de asemenea, un element major de programare: bucla. Buclele sunt un instrument important găsit în multe proceduri și proiecte. De fapt, o buclă repetă o anumită acțiune până când o condiție este îndeplinită. Este ca și cum ai spune: "Continuă să rearanjezi aceste cărți până când stiva este în ordine alfabetică".
1. Option Explicit
2. Option Base 1
3.
4. Sub Sortare_Matrice()
5.
6. 'declarare matrice si alte variabile
7. Dim strArray(12) As String
8. Dim strTemp As String
9. Dim strMsg As String
10. Dim X As Integer, Y As Integer, i As Integer
11.
12. 'atribuire valori text – string la matrice
13. strArray(1) = "nihilism"
14. strArray(2) = "defetism"
15. strArray(3) = "speranta"
16. strArray(4) = "melancolie"
17. strArray(5) = "euforie"
18. strArray(6) = "disperare"
19. strArray(7) = "optimism"
20. strArray(8) = "pesimism"
21. strArray(9) = "bucurie"
22. strArray(10) = "fericire"
23. strArray(11) = "extaz"
24. strArray(12) = "mania"
25.
26. strMsg = "Elementul curent din matrice:" & vbCr & vbCr
27. For i = 1 To UBound(strArray)
28. strMsg = strMsg & i & ":" & vbTab & strArray(i) & vbCr
29. Next i
30. MsgBox strMsg, vbOKOnly + vbInformation, "Sortare matrice: 1"
31.
32. For X = LBound(strArray) To (UBound(strArray) - 1)
33. For Y = (X + 1) To UBound(strArray)
34. If strArray(X) > strArray(Y) Then
35. strTemp = strArray(X)
36. strArray(X) = strArray(Y)
37. strArray(Y) = strTemp
38. strTemp = ""
39. End If
40. Next Y
41. Next X
42.
43. strMsg = "Elemente în matricea sortata:" & vbCr & vbCr
44. For i = 1 To UBound(strArray)
45. strMsg = strMsg & i & ":" & vbTab & strArray(i) & vbCr
46. Next i
47. MsgBox strMsg, vbOKOnly + vbInformation, "Sortare matrice: 2"
48.
49. End Sub
Se recomandă citirea codului și a explicațiilor pentru a-l înțelege. În acest moment, este posibil să pară de neînțeles. Totuși, lucrurile vor deveni mai clare pe măsură ce se parcurge această carte. În plus, sortarea de tip bubble nu trebuie scrisă de la zero – se copie de mai sus și se poate modifica pentru a sorta orice altă matrice. Codul poate fi copiat de pe pagina: www.sybex.com/go/masteringvba2016.
Cum se pot localiza numerele liniilor în Editor
Exemplele cu coduri lungi, care se întind pe câteva rânduri sunt numerotate, astfel încât liniile pot fi ușor menționate în textul explicativ.
În Editor, linia curentă pe care se află cursorul este afișată în câmpul din extrema dreaptă a barei de instrumente Standard a Editorului, chiar lângă marcajul albastru Help.
Acest câmp afișează întotdeauna numărul curent al liniei (după Ln) și numărul de caractere (după Col), ca în această captură de ecran.
Iată descrierea comenzilor:
Procedura Sortare_Matrice afișează utilizatorului un mesaj cu elementele nesortate.
Partea de sortare a procedurii se află între liniile de la 32 până la 41. Iată detalii:
După terminarea procedurii Sortare_Matrice, este afișat un mesaj cu elementele sortate alfabetic.