Сортировка данных в ячейке, удаление дублей
ceHnau
Дата: Среда, 07.07.2021, 15:15 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация:
0
±
Замечаний:
20% ±
2016
Здравствуйте! Данная тема уже поднималась , однако требуемого решения найти и не удалось. Все макросы есть(в файле примере), находил отдельно рабочие функции, но в виду моей криворукости и малых знаний, свести все воедино с нужными мне параметрами не получается. Уже часа 4 сижу. Все до чего дошел - могу выделить только одну ячейку, далее текст копируется на отдельный лист, там макросом разбивается, блин, еще Месседж бокс каждый раз спрашивает про разделитель (он у меня всегда по умолчанию пробел), макросом удаляются дубли, им же соединяется, после чего копируется в ранее выделенную ячейку. Вариант рабочий, но долгий. В идеале получить не функцию, а макрос, в теле которого бы добрый человек пометил
'место, где можно заменить стандартный разделитель используемый при поиске, или перечислить нужные через запятые
и
'место, где можно заменить стандартный разделитель, выдаваемый после объединения
. Без всякий Месседж боксов. Если же макросом можно будет выделять диапазон ячеек - вообще супер!
Здравствуйте! Данная тема уже поднималась , однако требуемого решения найти и не удалось. Все макросы есть(в файле примере), находил отдельно рабочие функции, но в виду моей криворукости и малых знаний, свести все воедино с нужными мне параметрами не получается. Уже часа 4 сижу. Все до чего дошел - могу выделить только одну ячейку, далее текст копируется на отдельный лист, там макросом разбивается, блин, еще Месседж бокс каждый раз спрашивает про разделитель (он у меня всегда по умолчанию пробел), макросом удаляются дубли, им же соединяется, после чего копируется в ранее выделенную ячейку. Вариант рабочий, но долгий. В идеале получить не функцию, а макрос, в теле которого бы добрый человек пометил
'место, где можно заменить стандартный разделитель используемый при поиске, или перечислить нужные через запятые
и
'место, где можно заменить стандартный разделитель, выдаваемый после объединения
. Без всякий Месседж боксов. Если же макросом можно будет выделять диапазон ячеек - вообще супер! ceHnau
Ответить
Сообщение Здравствуйте! Данная тема уже поднималась , однако требуемого решения найти и не удалось. Все макросы есть(в файле примере), находил отдельно рабочие функции, но в виду моей криворукости и малых знаний, свести все воедино с нужными мне параметрами не получается. Уже часа 4 сижу. Все до чего дошел - могу выделить только одну ячейку, далее текст копируется на отдельный лист, там макросом разбивается, блин, еще Месседж бокс каждый раз спрашивает про разделитель (он у меня всегда по умолчанию пробел), макросом удаляются дубли, им же соединяется, после чего копируется в ранее выделенную ячейку. Вариант рабочий, но долгий. В идеале получить не функцию, а макрос, в теле которого бы добрый человек пометил [vba]
'место , где можно заменить стандартный разделитель используемый при поиске , или перечислить нужные через запятые
[/vba] и [vba]
'место , где можно заменить стандартный разделитель , выдаваемый после объединения
[/vba]. Без всякий Месседж боксов. Если же макросом можно будет выделять диапазон ячеек - вообще супер! Автор - ceHnau Дата добавления - 07.07.2021 в 15:15
Pelena
Дата: Среда, 07.07.2021, 17:29 |
Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19511
Репутация:
4620
±
Замечаний:
±
Excel 365 & Mac Excel
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
nilem
Дата: Среда, 07.07.2021, 17:45 |
Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация:
563
±
Замечаний:
0% ±
Excel 2013, 2016
или такой вариант:
Sub ertert()
Dim x, i&, j&, sp
x = Selection.Value 'предварительно выделить несколько ячеек в одной колонке
If Not IsArray (x) Then Exit Sub
'http://www.excelworld.ru/board/vba/tricks/obekt_arraylist/9-1-0-49
With CreateObject ("System.Collections.ArrayList" )
For i = 1 To UBound (x)
sp = Split (x(i, 1 ), " " ) ' " " исходный разделитель пробел
For j = 0 To UBound (sp)
If Not .Contains(CStr (sp(j))) Then .Add CStr (sp(j)) 'только уникальные
Next j
.Sort 'сортируем
x(i, 1 ) = Join (.ToArray, "; " ) ' "; " конечный разделитель двоеточие с пробелом
.Clear
Next i
End With
Selection.Offset(, 1 ).Value = x 'в соседнюю колонку пишем результат
End Sub
или такой вариант:
Sub ertert()
Dim x, i&, j&, sp
x = Selection.Value 'предварительно выделить несколько ячеек в одной колонке
If Not IsArray (x) Then Exit Sub
'http://www.excelworld.ru/board/vba/tricks/obekt_arraylist/9-1-0-49
With CreateObject ("System.Collections.ArrayList" )
For i = 1 To UBound (x)
sp = Split (x(i, 1 ), " " ) ' " " исходный разделитель пробел
For j = 0 To UBound (sp)
If Not .Contains(CStr (sp(j))) Then .Add CStr (sp(j)) 'только уникальные
Next j
.Sort 'сортируем
x(i, 1 ) = Join (.ToArray, "; " ) ' "; " конечный разделитель двоеточие с пробелом
.Clear
Next i
End With
Selection.Offset(, 1 ).Value = x 'в соседнюю колонку пишем результат
End Sub
nilem
Яндекс.Деньги 4100159601573
Ответить
Сообщение или такой вариант: [vba]
Sub ertert()Dim x , i &, j &, spx = Selection.Value 'предварительно выделить несколько ячеек в одной колонкеIf Not IsArray(x ) Then Exit Sub 'http ://www.excelworld.ru /board /vba /tricks /obekt_arraylist /9-1-0-49With CreateObject("System.Collections.ArrayList") For i = 1 To UBound(x ) sp = Split(x(i , 1), " ") ' " " исходный разделитель пробел For j = 0 To UBound(sp ) If Not .Contains(CStr(sp(j ))) Then .Add CStr(sp(j )) 'только уникальные Next j .Sort 'сортируем x(i , 1) = Join(.ToArray , "; ") ' "; " конечный разделитель двоеточие с пробелом .Clear Next iEnd WithSelection.Offset(, 1).Value = x 'в соседнюю колонку пишем результатEnd Sub
[/vba] Автор - nilem Дата добавления - 07.07.2021 в 17:45
ceHnau
Дата: Четверг, 08.07.2021, 08:10 |
Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация:
0
±
Замечаний:
20% ±
2016
Воспользовалась Готовым решением
То что нужно! Потихоньку постигаю этот язык, пока не понял почему
Dim v, cell As Range, s As String , spl
- spl без указания типа, разберусь)
Воспользовалась Готовым решением
То что нужно! Потихоньку постигаю этот язык, пока не понял почему
Dim v, cell As Range, s As String , spl
- spl без указания типа, разберусь)ceHnau
Ответить
Сообщение Воспользовалась Готовым решением
То что нужно! Потихоньку постигаю этот язык, пока не понял почему [vba]
Dim v , cell As Range , s As String , spl
[/vba] - spl без указания типа, разберусь)Автор - ceHnau Дата добавления - 08.07.2021 в 08:10
Serge_007
Дата: Четверг, 08.07.2021, 09:22 |
Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация:
2749
±
Замечаний:
±
Excel 2016
Если не указывать тип, то переменной присваивается variant
Если не указывать тип, то переменной присваивается variant Serge_007
ЮMoney :41001419691823 | WMR :126292472390
Ответить
Сообщение Если не указывать тип, то переменной присваивается variant Автор - Serge_007 Дата добавления - 08.07.2021 в 09:22
ceHnau
Дата: Четверг, 08.07.2021, 10:32 |
Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация:
0
±
Замечаний:
20% ±
2016
Если не указывать тип, то переменной присваивается variant
Спасибо.
Если не указывать тип, то переменной присваивается variant
Спасибо.ceHnau
Ответить
Сообщение Если не указывать тип, то переменной присваивается variant
Спасибо.Автор - ceHnau Дата добавления - 08.07.2021 в 10:32
Pelena
Дата: Четверг, 08.07.2021, 12:25 |
Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19511
Репутация:
4620
±
Замечаний:
±
Excel 365 & Mac Excel
Николай, видимо, что-то надо дополнительно подключить. Выдаёт ошибку Automation error на строчке
With CreateObject ("System.Collections.ArrayList" )
Николай, видимо, что-то надо дополнительно подключить. Выдаёт ошибку Automation error на строчке
With CreateObject ("System.Collections.ArrayList" )
Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Николай, видимо, что-то надо дополнительно подключить. Выдаёт ошибку Automation error на строчке [vba]
With CreateObject("System.Collections.ArrayList")
[/vba] Автор - Pelena Дата добавления - 08.07.2021 в 12:25
nilem
Дата: Четверг, 08.07.2021, 13:18 |
Сообщение № 8
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация:
563
±
Замечаний:
0% ±
Excel 2013, 2016
FrameWork не установлен (или недоустановлен) в Виндоус. Такое бывает, поэтому ArrayList редко используют. Хотя объект классный.
FrameWork не установлен (или недоустановлен) в Виндоус. Такое бывает, поэтому ArrayList редко используют. Хотя объект классный. nilem
Яндекс.Деньги 4100159601573
Ответить
Сообщение FrameWork не установлен (или недоустановлен) в Виндоус. Такое бывает, поэтому ArrayList редко используют. Хотя объект классный. Автор - nilem Дата добавления - 08.07.2021 в 13:18