У меня есть следующий код, предназначенный для извлечения уникальных значений из диапазона, вывод которого печатается в окне отладки:
Option Explicit
Sub main()
Dim uniques As Collection
Dim source As Range
Set source = ActiveSheet.Range("P2:AF60000")
Set uniques = GetUniqueValues(source.Value)
Dim it
For Each it In uniques
Debug.Print it
Next
End Sub
Public Function GetUniqueValues(ByVal values As Variant) As Collection
Dim result As Collection
Dim cellValue As Variant
Dim cellValueTrimmed As String
Set result = New Collection
Set GetUniqueValues = result
On Error Resume Next
For Each cellValue In values
cellValueTrimmed = Trim(cellValue)
If cellValueTrimmed = "" Then GoTo NextValue
result.Add cellValueTrimmed, cellValueTrimmed
NextValue:
Next cellValue
On Error GoTo 0
End Function
Как я могу распечатать его в столбце (значение в ячейке) на новом листе?
Вы можете создать новый лист с именем, которое вы предпочитаете, а затем выполнить итерацию ячеек одного столбца, чтобы добавить в него значения. Вот один из способов создания листа с помощью вспомогательной функции:
Public Function CreateSheet(ByVal shtName As String) As Worksheet
Dim ws As Worksheet
With ThisWorkbook
Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
ws.Name = shtName
End With
Set CreateSheet = ws
End Function
И вы можете использовать его следующим образом:
Sub main()
Dim uniques As Collection
Dim source As Range
Set source = ActiveSheet.Range("P2:AF60000")
Set uniques = GetUniqueValues(source.Value)
Dim outputSheet As Worksheet
Set outputSheet = CreateSheet("Output")
Dim i As Long
For i = 1 To uniques.Count
'Debug.Print uniques(i)
outputSheet.Cells(i, 1).Value = uniques(i)
Next
End Sub
Это создаст новый лист с именем Output
и заполнит столбец A
этого листа значениями из вашей uniques
коллекции.