Спасибо за ваш вариант, но проблема в том что мне именно надо выгружать в строку уже отсортированный диапазон, а у вас он в столбец выгружает, досадно:(
Спасибо за ваш вариант, но проблема в том что мне именно надо выгружать в строку уже отсортированный диапазон, а у вас он в столбец выгружает, досадно:(mss
Sub элемент_таблицы() Dim myRange As Range, myCell As Range, AL As Object, v As Variant, r As Variant, _ myElement As Variant, i As Long, smyRange As Range, ssmyRange As Range Dim LastRow Dim sLastRow Application.ScreenUpdating = False Application.Calculation = xlCalculationManual LastRow = Sheets("Лист2").Cells(Sheets("Лист2").Rows.Count, 1).End(xlUp).Row sLastRow = Sheets("Лист3").Cells(Sheets("Лист3").Rows.Count, 1).End(xlUp).Row Set myRange = Sheets("Лист2").Range("A2:A" & LastRow) Set ssmyRange = Sheets("Лист3").Range("A2:A" & sLastRow) On Error Resume Next
Set AL = CreateObject("system.Collections.Arraylist")
For Each r In Array(myRange, ssmyRange) For Each v In r.Value If Not IsEmpty(v) And Not AL.contains(v) Then AL.Add v Next v, r AL.Sort
On Error GoTo 0 [проба!J2].Resize(, AL.Count) = AL.toarray
Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
[/vba]
Вариант с Arraylist
[vba]
Код
Sub элемент_таблицы() Dim myRange As Range, myCell As Range, AL As Object, v As Variant, r As Variant, _ myElement As Variant, i As Long, smyRange As Range, ssmyRange As Range Dim LastRow Dim sLastRow Application.ScreenUpdating = False Application.Calculation = xlCalculationManual LastRow = Sheets("Лист2").Cells(Sheets("Лист2").Rows.Count, 1).End(xlUp).Row sLastRow = Sheets("Лист3").Cells(Sheets("Лист3").Rows.Count, 1).End(xlUp).Row Set myRange = Sheets("Лист2").Range("A2:A" & LastRow) Set ssmyRange = Sheets("Лист3").Range("A2:A" & sLastRow) On Error Resume Next
Set AL = CreateObject("system.Collections.Arraylist")
For Each r In Array(myRange, ssmyRange) For Each v In r.Value If Not IsEmpty(v) And Not AL.contains(v) Then AL.Add v Next v, r AL.Sort
On Error GoTo 0 [проба!J2].Resize(, AL.Count) = AL.toarray
Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
Boroda, спасибо, хороших идей ни когда не бывает много:), любые варианты в "копилочку". А по поводу максимального количеству уникальных, точно известно их будет <=120 просто перебираться массив может среди 200 тыс. строк., еще раз всем спасибо.
Boroda, спасибо, хороших идей ни когда не бывает много:), любые варианты в "копилочку". А по поводу максимального количеству уникальных, точно известно их будет <=120 просто перебираться массив может среди 200 тыс. строк., еще раз всем спасибо.mss