Страницы: 1
RSS
Вытащить из двумерного массива уникальные по алфавиту
 
В файле-примере прямоугольный диапазон, в нем некоторые заполнены, а некоторые нет (ошибок внутри не должно быть)
Как можно формулой вытащить из этого диапазона уникальные значения (такой формулой, которую можно растягивать) и при этом чтобы значения шли как бы по алфавиту.
 
Вот так формулой можно вытащить уникальные значения без сортировки.
 
Цитата
Zhukov_K написал:
формулой, которую можно растягивать
А зачем растягивать, если нужен отсортированный список уникальных?
Макросом можно.
 
А вот так ещё и с сортировкой формулой.
 
Цитата
Юрий М написал: А зачем растягивать
Растягивать по той причине, что это не разовое действие (получение такого списка). То есть массив тот (прямоугольный) он будет расти вниз, а также в нем будут появляться новые уникальные элементы
 
МатросНаЗебре Ваше решение посмотрел, для этого конкретного примера оно работает! Спасибо!
Но у него есть "минус" к сожалению. Если диапазон с данными вырастет вниз, то придется также растянуть диапазоны которые Вы используете во вспомогательных столбцах, что не совсем удобно.
 
Макрос. Столбец Р можно удалить - данные только для проверки результата.
 
Немного перемудрил: дважды коллекцию создаю ))
 
Т. к. результат требуется вывести на лист, то ничто не мешает использовать встроенный в Excel метод сортировки.
Поэтому, код макроса можно существенно упростить:
Код
Sub qq()
    Dim cell As Range, x As Range, z As New Collection, a()
    Set x = [C4:K17]: ReDim a(1 To x.Cells.Count, 1 To 1)
    For Each cell In x.SpecialCells(xlCellTypeConstants)
        On Error Resume Next: z.Add cell, CStr(cell)
        If Err = 0 Then a(z.Count, 1) = z(z.Count) Else On Error GoTo 0
    Next
    [N4].Resize(x.Count).ClearContents
    [N4].Resize(z.Count).Value = a
    [N4].Resize(z.Count).Sort [N4]
End Sub
Пример во вложении.
Во втором примере файл, в котором макрос выполняется при каждом изменении ячеек в контролируемом диапазоне.
Изменено: SAS888 - 19.08.2016 05:55:36 (Добавлено)
Чем шире угол зрения, тем он тупее.
 
Спасибо большое за решение макросом!
Если невозможно формулой, то буду пользоваться макросами.
вдруг кто-то еще формулой сделает (по моему, Владимир говорил, что это реально формулой сделать)
 
Набросок. Tакая формула выберет ВСЕ значения (и текст, и числа) из ячеек прямоугольного диапазона:
=ИНДЕКС($A$1:$K$17;ЦЕЛОЕ(НАИБОЛЬШИЙ(ЕСЛИ($C$4:$K$17<>"";СТРОКА($C$4:$K$17)+СТОЛБЕЦ($C$4:$K$17)*0,001);СТРОКА(A1)));1000*(НАИБОЛЬШИЙ(ЕСЛИ($C$4:$K$17<>"";СТРОКА($C$4:$K$17)+СТОЛБЕЦ($C$4:$K$17)*0,001);СТРОКА(A1))-ЦЕЛОЕ(НАИБОЛЬШИЙ(ЕСЛИ($C$4:$K$17<>"";СТРОКА($C$4:$K$17)+СТОЛБЕЦ($C$4:$K$17)*0,001);СТРОКА(A1)))))
Естественно, упростить можно Но еще нужно извлечь унмкальные и сортировать...

Вам шашечки или ехать? В смысле: работать или поиграться? Если работать, советую не вбивать себе в голову, что все задачи можно решить одной формулой. Не всегда больше знаков, формул и занятых вычислениями ячеек хуже
 
Вас я понял, спасибо!
 
Без сортировки:
=ИНДЕКС($C$4:$K$17;(МАКС((СЧЁТЕСЛИ($N$3:N3;$C$4:$K$17)=0)*((СТРОКА($C$4:$K$17)-4)*9+СТОЛБЕЦ($C$4:$K$17)))-3)/9+1;(ОСТАТ(МАКС((СЧЁТЕСЛИ($N$3:N3;$C$4:$K$17)=0)*((СТРОКА($C$4:$K$17)-4)*9+СТОЛБЕЦ($C$4:$K$17)))-3;9)+1))
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, спасибо!
Страницы: 1
Наверх