У меня есть история прослушивания из Spotify на листе Excel. Я хотел бы извлечь всех уникальных исполнителей из этого списка и записать их в другой столбец на том же листе Excel.
Sub CountUniqueValues()
Dim wb As Workbook
Set wb = Workbooks("Spotify_Analysis_XYZ.xlsm")
Dim ws As Worksheet
Set ws1 = wb.Worksheets("Sheet1")
Dim LastRow As Long
LastRow = Cells(Rows.Count, "B").End(xlUp).Row
Dim UniqueArtists As Variant
UniqueArtists = Evaluate("Unique(" & "B2:B" & LastRow & ",TRUE,FALSE)")
ws1.Cells("2:40000", 8) = UniqueArtists
End Sub
Где все исполнители хранятся в столбце B.
Я получаю несоответствие типов.
Убедитесь, что вы указали, на каком листе должна использоваться оценка: ws1.Evaluate(....
Хотя хорошо понимать VBA, почему бы вам просто не использовать UNIQUE() в функции электронной таблицы (поскольку вы используете версию Excel, в которой эта функция существует). =UNIQUE(B:B,TRUE,FALSE) в любой ячейке, которую вы хотите разместить в верхней части столбца результатов.



Это будет работать, если вы убедитесь, что правильный рабочий лист правильной книги Active:
Sub uniqB2H()
Dim LastRow As Long
LastRow = Cells(Rows.Count, "B").End(xlUp).Row
Range("H2").Formula2 = "=Unique(B2:B" & LastRow & ")"
Range("H2#").Value = Range("H2#").Value
End Sub
РЕДАКТИРОВАТЬ № 1:
Active; таким образом, ни один из диапазонов не должен быть квалифицированFormula2 используется для размещения динамической формулы в ячейкеRange("H2#"), который указывает полный диапазон распространения.Правильно, и было бы полезно объяснить как ссылку на диапазон разливов, так и полностью уточняющие ссылки на диапазон для очевидного новичка :-)
@Т.М. Ценный комментарий. см. мой РЕДАКТИРОВАТЬ # 1
Вот еще один способ заставить его работать. Ваша последняя строка не была диапазоном.
Sub CountUniqueValues()
Dim t As Long
Dim wb As Workbook
Set wb = Workbooks("Spotify_Analysis_XYZ.xlsm")
Dim ws1 As Worksheet
Set ws1 = wb.Worksheets("Sheet1")
Dim LastRow As Long
LastRow = ws1.Cells(Rows.Count, "B").End(xlUp).Row
Dim UniqueArtists As Variant
UniqueArtists = Evaluate("Unique(Sheet1!B2:B" & LastRow & ",false,FALSE)")
t = UBound(UniqueArtists) - 1
ws1.Range(ws1.Cells(2, 8), ws1.Cells(2 + t, 8)) = UniqueArtists
End Sub
+1 За упоминание причины ошибки и рабочий пример с правильным синтаксисом; кстати Unique() без логических аргументов это то же самое, что 2 раза False :-)
ws1Не определено. Вам нужно изменить его наSet ws = wb.Worksheets("Sheet1")илиDim ws As WorksheetнаDim ws1 As Worksheet