Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 4
  • 260

Na stronie:

https://newtonexcelbach.wordpress.com/2012/01/31/retrieving-unique-values-from-a-range-or-array/

Znalazłem funkcję tablicową UDF (trzeba wprowadzić wciskając  (Ctrl+Shift+Enter), która umożliwia uzyskanie unikalnych wartości z zakresu. Jak przerobić tę funkcję, aby zwracała wartości posortowane?

Function Unique(DRange As Variant) As Variant
 
Dim Dict As Object
Dim i As Long, j As Long, NumRows As Long, NumCols As Long
 
'Convert range to array and count rows and columns
If TypeName(DRange) = "Range" Then DRange = DRange.Value2
NumRows = UBound(DRange)
NumCols = UBound(DRange, 2)
 
'put unique data elements in a dictionay
Set Dict = CreateObject("Scripting.Dictionary")
For i = 1 To NumCols
For j = 1 To NumRows
Dict(DRange(j, i)) = 1
 Next j
Next i
 
'Dict.Keys() is a Variant array of the unique values in DRange
 'which can be written directly to the spreadsheet
 'but transpose to a column array first
 
Unique = WorksheetFunction.Transpose(Dict.keys)
 
End Function

Autor artykułu wspomina, że struktura dictionary w VBA nie jest dobrze udokumentowana, więc przy okazji byłbym ciekaw, jak w VBA posortować taką strukturę.

Z góry dziękuję za podpowiedź.

 

Jacek_Kotowski
  • Zapytał
  • @ Jacek_Kotowski | 12.03.2015
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94

Odpowiedź (1)

  • 0

Można np. użyć sortowania bąbelkowego lub wrzucić tablicę do Excela i normalnie posortować.
A do zdobycia wartości unikalnych prościej chyba użyć metody RemoveDuplicates.

  • Odpowiedział
  • @ | 02.09.2015
  • TRENER ALTKOM AKADEMII