Добрый день!
Подскажите, пожалуйста, что не так в прилагаемой процедуре? Коллекция из уникальных значений формируется правильно, массив из тех же значений - тоже правильно, но при вставке я получаю только первый элемент массива в каждой ячейке. При вставке я избегал цикла, как рекомендует Уокенбах, но у него в примере данные из массива в диапазон переносятся правильно, а у меня нет.
Буду благодарен за помощь.
Подскажите, пожалуйста, что не так в прилагаемой процедуре? Коллекция из уникальных значений формируется правильно, массив из тех же значений - тоже правильно, но при вставке я получаю только первый элемент массива в каждой ячейке. При вставке я избегал цикла, как рекомендует Уокенбах, но у него в примере данные из массива в диапазон переносятся правильно, а у меня нет.
Буду благодарен за помощь.
| Код |
|---|
Sub CopyPasteUnique()
'процедура формируем массив уникальных значений в выбранном диапазоне и вставляем его в указанную ячейку
Dim cell As Range
Dim Unique As New Collection
Dim cellPaste As Range
Dim i As Long
Dim UniqueArray()
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
On Error Resume Next
'запрашиваем у пользователя ячейку для вставки
Set cellPaste = Application.InputBox("Укажите ячейку для вставки", Type:=8)
On Error GoTo 0
If cellPaste Is Nothing Then
Exit Sub
End If
Set cellPaste = cellPaste.Range("A1")
On Error Resume Next
For Each cell In Selection
'формируем коллекцию из уникальных значений диапазона
If cell.Value <> "" Then
Unique.Add cell.Value, CStr(cell.Value)
End If
Next cell
On Error GoTo 0
ReDim UniqueArray(1 To Unique.Count)
'переносим уникальные значения в массив
For i = 1 To Unique.Count
UniqueArray(i) = Unique.Item(i)
Next i
'определяем диапазон для вставки
Set cellPaste = Range(cellPaste, cellPaste.Offset(Unique.Count - 1, 0))
'вставляем массив в диапазон
' при вставке я пытался избежать цыкла (рекомендация одного автора учебника по VBA с примером).
' во всем диапазоне для вставки я получаю только первое значание массива
cellPaste.Value = UniqueArray
End Sub |