poniedziałek, 9 grudnia 2013

Unikalne wartości tablicy Array (1/2)

 Jak skutecznie odnaleźć unikalne wartości z tablicy Array?
 powyższe pytanie usłyszałem podczas kursu VBA prowadzonego ostatnio w Warszawie.

Osobiście stosuję dwie (lub trzy) techniki odszukiwania unikatów:

Technika 1. wartości tablicy wrzucamy w pionowy, czysty obszar arkusza, następnie stosując polecenie usuwania duplikatów (RemoveDuplicates) pozbywamy się zbędnych elementów, a następnie wynik pobieramy do naszej tablicy w kodzie VBA. Przyznam jednak, że rozwiązanie to nie należy do najbardziej efektywnych.

Technika 2. o wiele łatwiej i skuteczniej będzie sięgnąć po obiekt kolekcji (Collection) w VBA. W tym celu wykorzystamy fakt, że dodanie elementu do kolekcji, nie jest możliwe jeżeli element taki już istnieje. Jeżeli podejmujemy taką próbę to kompilator zwraca błąd wykonania. W naszej procedurze zignorujemy taki błąd w wyniku czego zignorujemy jednocześnie dany element.

01Sub Unikaty_kolekcja()
02  
03    Dim arrKolekcja As New Collection
04    Dim Element As Variant
05    Dim arrTablica As Variant
06    Dim i As Long
07 
08    'nasza przykładowa tablica
09    arrTablica = Array("Do", "Re", "Mi", "Do", "Fa", "Sol", _
10                "Re", "Mi", "Fa", "La", "Do", "Si", _
11                "Do", "Re", "Mi", _
12                "fa", "sol", "LA", "sI")
13 
14    'ignorujemy błąd powtarzajacych się elementów
15    On Error Resume Next
16    'tworzymy kolekcję
17    For Each Element In arrTablica
18         arrKolekcja.Add Element, Element
19    Next
20 
21    'przywracamy standardową obsługę błędów
22    On Error GoTo 0
23 
24     
25    'zwracamy elementy kolekcji do arkusza
26    For i = 1 To arrKolekcja.Count
27        Cells(i, 1) = arrKolekcja(i)
28    Next
29 
30    'Wynik: Do,Re,Mi,Fa,Sol,La,Si
31 
32End Sub

Więcej informacji na temat kolekcji znaleźć można pod tym linkiem.
Kolekcje nie są jedynym czysto programistycznym sposobem na uzyskanie unikatów z tablicy. O alternatywnej technice napiszę w osobnym poście. Zapraszam do lektury już wkrótce.

Brak komentarzy:

Prześlij komentarz