Предположим, у меня есть следующее в ячейках от A1 до A5 и я хочу получить массив уникальных значений, т.е. {a, b, c, d}
A
1 "a"
2 "b"
3 "c"
4 "c"
5 "d"
Следующие два фрагмента кода помогут достичь этого:
CreateUniqueArray - получить значение val из каждой ячейки и добавить в массив, если его еще нет в массиве
IsInArray - служебная функция для проверки значения в массиве путем выполнения простого цикла
Я должен сказать, что это грубая сила и приветствовал бы любые улучшения ...
Sub Test()
Dim firstRow As Integer, lastRow As Integer, cnt As Integer, iCell As Integer
Dim myArray()
cnt = 0
firstRow = 1
lastRow = 10
For iCell = firstRow To lastRow
If Not IsInArray(myArray, Cells(iCell, 1)) Then
ReDim Preserve myArray(cnt)
myArray(cnt) = Cells(iCell, 1)
cnt = cnt + 1
End If
Next iCell
End Sub
Function IsInArray(myArray As Variant, val As String) As Boolean
Dim i As Integer, found As Boolean
found = False
If Not Len(Join(myArray)) > 0 Then
found = False
Else
For i = 0 To UBound(myArray)
If myArray(i) = val Then
found = True
End If
Next i
End If
IsInArray = found
End Function