Там в функции нужно удалить создание массива. И добавлять в словарь сразу из диапазона через for each... делов то на несколько минут Если что завтра сделаю... с телефона не получится.
Там в функции нужно удалить создание массива. И добавлять в словарь сразу из диапазона через for each... делов то на несколько минут Если что завтра сделаю... с телефона не получится.SLAVICK
SLAVICK, Ого какой большой код ! Я думал там небольшая формула будет. Но средний столбик без сортировки зачет ! )думаю можно использовать .
SLAVICK, Ого какой большой код ! Я думал там небольшая формула будет. Но средний столбик без сортировки зачет ! )думаю можно использовать .koyaanisqatsi
Ого какой большой код ! Я думал там небольшая формула будет
Может и формула будет... мне проще UDF написать Это взято из функции, которая делает немного больше, чем Вам нужно.
Его можно урезать пополам... а если без сортировки - вообще в 4-е раза просто лениво было
Ну вот:
[vba]
Код
Public Function Уникальные_по_критерию(диапазон As Range, Optional type_info& = 0) Dim i&, mas() As String Dim dic As Object, arrDicKeys(), n& Set dic = CreateObject("Scripting.Dictionary") n = Application.Caller.Cells.Count ReDim mas(1 To диаппазон.Count, 1 To 1) For Each C In диаппазон i = i + 1 mas(i, 1) = C Next 'Добавление уникальных в словарь For i = 1 To UBound(mas) If Not dic.Exists(mas(i, 1)) And Not Trim(mas(i, 1)) = "" Then dic.Add mas(i, 1), i Next i If type_info = 0 Then Уникальные_по_критерию = dic.Count: Exit Function arrDicKeys = dic.keys ' перегон в массив ReDim mas(1 To n, 1 To 1)
If n > UBound(arrDicKeys) + 1 Then n = UBound(arrDicKeys) + 1 For i = 1 To n: mas(i, 1) = arrDicKeys(i - 1): Next i Уникальные_по_критерию = mas End Function
Ого какой большой код ! Я думал там небольшая формула будет
Может и формула будет... мне проще UDF написать Это взято из функции, которая делает немного больше, чем Вам нужно.
Его можно урезать пополам... а если без сортировки - вообще в 4-е раза просто лениво было
Ну вот:
[vba]
Код
Public Function Уникальные_по_критерию(диапазон As Range, Optional type_info& = 0) Dim i&, mas() As String Dim dic As Object, arrDicKeys(), n& Set dic = CreateObject("Scripting.Dictionary") n = Application.Caller.Cells.Count ReDim mas(1 To диаппазон.Count, 1 To 1) For Each C In диаппазон i = i + 1 mas(i, 1) = C Next 'Добавление уникальных в словарь For i = 1 To UBound(mas) If Not dic.Exists(mas(i, 1)) And Not Trim(mas(i, 1)) = "" Then dic.Add mas(i, 1), i Next i If type_info = 0 Then Уникальные_по_критерию = dic.Count: Exit Function arrDicKeys = dic.keys ' перегон в массив ReDim mas(1 To n, 1 To 1)
If n > UBound(arrDicKeys) + 1 Then n = UBound(arrDicKeys) + 1 For i = 1 To n: mas(i, 1) = arrDicKeys(i - 1): Next i Уникальные_по_критерию = mas End Function