Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сортировка данных в ячейке, удаление дублей - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сортировка данных в ячейке, удаление дублей (Макросы/Sub)
Сортировка данных в ячейке, удаление дублей
ceHnau Дата: Среда, 07.07.2021, 15:15 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 20% ±

Здравствуйте!

Данная тема уже поднималась, однако требуемого решения найти и не удалось.

Все макросы есть(в файле примере), находил отдельно рабочие функции, но в виду моей криворукости и малых знаний, свести все воедино с нужными мне параметрами не получается. Уже часа 4 сижу.
Все до чего дошел - могу выделить только одну ячейку, далее текст копируется на отдельный лист, там макросом разбивается, блин, еще Месседж бокс каждый раз спрашивает про разделитель (он у меня всегда по умолчанию пробел), макросом удаляются дубли, им же соединяется, после чего копируется в ранее выделенную ячейку. Вариант рабочий, но долгий.

В идеале получить не функцию, а макрос, в теле которого бы добрый человек пометил [vba]
Код
'место, где можно заменить стандартный разделитель используемый при поиске, или перечислить нужные через запятые
[/vba] и [vba]
Код
'место, где можно заменить стандартный разделитель, выдаваемый после объединения
[/vba]. Без всякий Месседж боксов. Если же макросом можно будет выделять диапазон ячеек - вообще супер!
К сообщению приложен файл: 9963261.xlsm (40.3 Kb)
 
Ответить
СообщениеЗдравствуйте!

Данная тема уже поднималась, однако требуемого решения найти и не удалось.

Все макросы есть(в файле примере), находил отдельно рабочие функции, но в виду моей криворукости и малых знаний, свести все воедино с нужными мне параметрами не получается. Уже часа 4 сижу.
Все до чего дошел - могу выделить только одну ячейку, далее текст копируется на отдельный лист, там макросом разбивается, блин, еще Месседж бокс каждый раз спрашивает про разделитель (он у меня всегда по умолчанию пробел), макросом удаляются дубли, им же соединяется, после чего копируется в ранее выделенную ячейку. Вариант рабочий, но долгий.

В идеале получить не функцию, а макрос, в теле которого бы добрый человек пометил [vba]
Код
'место, где можно заменить стандартный разделитель используемый при поиске, или перечислить нужные через запятые
[/vba] и [vba]
Код
'место, где можно заменить стандартный разделитель, выдаваемый после объединения
[/vba]. Без всякий Месседж боксов. Если же макросом можно будет выделять диапазон ячеек - вообще супер!

Автор - ceHnau
Дата добавления - 07.07.2021 в 15:15
Pelena Дата: Среда, 07.07.2021, 17:29 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19162
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Воспользовалась Готовым решением
К сообщению приложен файл: 7159983.xlsm (41.2 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Воспользовалась Готовым решением

Автор - Pelena
Дата добавления - 07.07.2021 в 17:29
nilem Дата: Среда, 07.07.2021, 17:45 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
или такой вариант:
[vba]
Код
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
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеили такой вариант:
[vba]
Код
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
[/vba]

Автор - nilem
Дата добавления - 07.07.2021 в 17:45
ceHnau Дата: Четверг, 08.07.2021, 08:10 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 20% ±

Воспользовалась Готовым решением

То что нужно! Потихоньку постигаю этот язык, пока не понял почему [vba]
Код
Dim v, cell As Range, s As String, spl
[/vba] - spl без указания типа, разберусь)
 
Ответить
Сообщение
Воспользовалась Готовым решением

То что нужно! Потихоньку постигаю этот язык, пока не понял почему [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
Репутация: 2748 ±
Замечаний: ±

Excel 2016
spl без указания типа
Если не указывать тип, то переменной присваивается variant


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
spl без указания типа
Если не указывать тип, то переменной присваивается variant

Автор - Serge_007
Дата добавления - 08.07.2021 в 09:22
ceHnau Дата: Четверг, 08.07.2021, 10:32 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 20% ±

Если не указывать тип, то переменной присваивается variant

Спасибо.
 
Ответить
Сообщение
Если не указывать тип, то переменной присваивается variant

Спасибо.

Автор - ceHnau
Дата добавления - 08.07.2021 в 10:32
Pelena Дата: Четверг, 08.07.2021, 12:25 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19162
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
или такой вариант:
Николай, видимо, что-то надо дополнительно подключить. Выдаёт ошибку Automation error на строчке [vba]
Код
With CreateObject("System.Collections.ArrayList")
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-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 редко используют. Хотя объект классный.


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеFrameWork не установлен (или недоустановлен) в Виндоус. Такое бывает, поэтому ArrayList редко используют. Хотя объект классный.

Автор - nilem
Дата добавления - 08.07.2021 в 13:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сортировка данных в ячейке, удаление дублей (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!