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

Вход

Регистрация

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

 

= Мир MS Excel/"Параллельная" сортировка списков - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » "Параллельная" сортировка списков (Макрос для сравнения и синхронизации списков)
"Параллельная" сортировка списков
Формуляр Дата: Пятница, 23.03.2012, 15:05 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Всем доброго времени суток!
На тему сравнения и синхронизации списков написано повсюду уже не мало.
Способы и алгоритмы есть разные.
Предлагаю свой вариант. Для моих потребностей он подходит лучше других.
Пробуйте, сравнивайте, выбирайте.
К сообщению приложен файл: ParaSort.xls (41.0 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеВсем доброго времени суток!
На тему сравнения и синхронизации списков написано повсюду уже не мало.
Способы и алгоритмы есть разные.
Предлагаю свой вариант. Для моих потребностей он подходит лучше других.
Пробуйте, сравнивайте, выбирайте.

Автор - Формуляр
Дата добавления - 23.03.2012 в 15:05
Alex_ST Дата: Среда, 28.03.2012, 09:47 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Спасибо, Саня, может пригодиться.
Только я не понял, зачем ты макрос в ThisWorkbook запихнул, а не в стандартный модуль?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСпасибо, Саня, может пригодиться.
Только я не понял, зачем ты макрос в ThisWorkbook запихнул, а не в стандартный модуль?

Автор - Alex_ST
Дата добавления - 28.03.2012 в 09:47
Формуляр Дата: Четверг, 29.03.2012, 11:14 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Безо всякого злого умысла. Чеснослово! smile
Просто "исторически сложилось", был код для Workbook - к нему дописал сортировку, потом лишнее убрал - сортировка осталась.
Логичнее уж на лист его упихать, а не в модуль, чтоб можно было не глядя внутрь, использовать лист в каком-то своём файле.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Четверг, 29.03.2012, 11:14
 
Ответить
СообщениеБезо всякого злого умысла. Чеснослово! smile
Просто "исторически сложилось", был код для Workbook - к нему дописал сортировку, потом лишнее убрал - сортировка осталась.
Логичнее уж на лист его упихать, а не в модуль, чтоб можно было не глядя внутрь, использовать лист в каком-то своём файле.

Автор - Формуляр
Дата добавления - 29.03.2012 в 11:14
Формуляр Дата: Пятница, 30.03.2012, 14:50 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Немного развил тему:
первая версия некорректно работала с повторами - теперь корректно.
К сообщению приложен файл: ParaSort2.xls (43.0 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеНемного развил тему:
первая версия некорректно работала с повторами - теперь корректно.

Автор - Формуляр
Дата добавления - 30.03.2012 в 14:50
Формуляр Дата: Суббота, 31.03.2012, 13:12 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Решил попробовать, что будет, если использовать при сортировке функцию нечёткого сравнения строк.
Допустимый уровень различия, при котором строки считаются одинаковыми, устанавливается в красной рамке сверху. Сравнение производится по триадам.

Обратите внимание:
При нечётком сравнении игнорируются все небуквенные символы, слова, короче 3х букв, и различия в регистре. Даже если погрешность = 0%.

При высоких значениях допустимой погрешности результат сортировки может оказаться непредсказуем.
Это связано с тем, что сначала выполняется стандартная процедура сортировки, а уже потом нечёткое сравнение списков между собой. При высокой погрешности одно может противоречить другому.

PS. Подробнее про методику сравнения смотите в теме Простая метрика сходства текстовых строк
К сообщению приложен файл: ParaSort3-1.1.xls (37.5 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Суббота, 31.03.2012, 13:24
 
Ответить
СообщениеРешил попробовать, что будет, если использовать при сортировке функцию нечёткого сравнения строк.
Допустимый уровень различия, при котором строки считаются одинаковыми, устанавливается в красной рамке сверху. Сравнение производится по триадам.

Обратите внимание:
При нечётком сравнении игнорируются все небуквенные символы, слова, короче 3х букв, и различия в регистре. Даже если погрешность = 0%.

При высоких значениях допустимой погрешности результат сортировки может оказаться непредсказуем.
Это связано с тем, что сначала выполняется стандартная процедура сортировки, а уже потом нечёткое сравнение списков между собой. При высокой погрешности одно может противоречить другому.

PS. Подробнее про методику сравнения смотите в теме Простая метрика сходства текстовых строк

Автор - Формуляр
Дата добавления - 31.03.2012 в 13:12
Alex_ST Дата: Суббота, 31.03.2012, 22:41 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Саш, привет!
Очень интересно посмотреть, но дома не могу: мелких делишек накопилось - всю плешь проели smile
А на работе небольшой завал. Наверное, посмотреть смогу только в понедельник в обеденный перерыв. Придётся мне потерпеть...

Что-то у нас Володя - v__step куда-то совсем заработался и пропал. Надо бы его с регэкспами привлечь тему покрутить.
Напишу, наверное, ему в личку, спрошу как дела...



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаш, привет!
Очень интересно посмотреть, но дома не могу: мелких делишек накопилось - всю плешь проели smile
А на работе небольшой завал. Наверное, посмотреть смогу только в понедельник в обеденный перерыв. Придётся мне потерпеть...

Что-то у нас Володя - v__step куда-то совсем заработался и пропал. Надо бы его с регэкспами привлечь тему покрутить.
Напишу, наверное, ему в личку, спрошу как дела...

Автор - Alex_ST
Дата добавления - 31.03.2012 в 22:41
Формуляр Дата: Воскресенье, 01.04.2012, 13:29 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Привет Лёша!
Ну ты сильно не переживай. smile
Особо радужных надежд я на этот эксперимент не возлагал изначально.
Заранее понятно, что применимость этой штуки сильно ограничена, ибо заложено в ней противоречие между предварительной стд. сортировкой, которая чувствительна к месту символа в строке, и последующим нечётким сравнением, которому всё равно.
Чтобы добиться устойчивой работы придётся разработать собственный принцип сортировки, конгруэнтный процедуре нечёткого сравнения... Только пока не понятно, чего ради.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеПривет Лёша!
Ну ты сильно не переживай. smile
Особо радужных надежд я на этот эксперимент не возлагал изначально.
Заранее понятно, что применимость этой штуки сильно ограничена, ибо заложено в ней противоречие между предварительной стд. сортировкой, которая чувствительна к месту символа в строке, и последующим нечётким сравнением, которому всё равно.
Чтобы добиться устойчивой работы придётся разработать собственный принцип сортировки, конгруэнтный процедуре нечёткого сравнения... Только пока не понятно, чего ради.

Автор - Формуляр
Дата добавления - 01.04.2012 в 13:29
Sharleez Дата: Среда, 24.10.2012, 21:15 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Формуляр, извините, пожалуйста за мое непонимание.
но как пользоваться макросом. вот у меня есть два списка , мне надо в сравнить данные в них между собой и выделить совпавшие.
можно это сделать с помощью подобного макроса???
 
Ответить
СообщениеФормуляр, извините, пожалуйста за мое непонимание.
но как пользоваться макросом. вот у меня есть два списка , мне надо в сравнить данные в них между собой и выделить совпавшие.
можно это сделать с помощью подобного макроса???

Автор - Sharleez
Дата добавления - 24.10.2012 в 21:15
Формуляр Дата: Четверг, 25.10.2012, 10:15 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Sharleez,
берёте файл ParaSort2.xls (или лист из него)
Копируете в него свои списки (в соседние столбцы)
Выбираете любую ячейку списка и давите на кнопку
Фильтруете пустые строки в обоих списках


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Четверг, 25.10.2012, 10:17
 
Ответить
СообщениеSharleez,
берёте файл ParaSort2.xls (или лист из него)
Копируете в него свои списки (в соседние столбцы)
Выбираете любую ячейку списка и давите на кнопку
Фильтруете пустые строки в обоих списках

Автор - Формуляр
Дата добавления - 25.10.2012 в 10:15
Формуляр Дата: Четверг, 06.11.2014, 21:37 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Загадочным образом попортился файл в посте №4. %)
И все молчат, главное... Не заглядывал что ль никто?

Выкладываю по этому поводу свежую версию.

PS: Напрасно переполошился, с файлом всё в порядке оказалось. :D
Видно, сбой при скачивании какой-то...
Зато, был повод обновить тему. :D
К сообщению приложен файл: ParaSort21.xls (55.5 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Пятница, 07.11.2014, 10:35
 
Ответить
СообщениеЗагадочным образом попортился файл в посте №4. %)
И все молчат, главное... Не заглядывал что ль никто?

Выкладываю по этому поводу свежую версию.

PS: Напрасно переполошился, с файлом всё в порядке оказалось. :D
Видно, сбой при скачивании какой-то...
Зато, был повод обновить тему. :D

Автор - Формуляр
Дата добавления - 06.11.2014 в 21:37
Alex_ST Дата: Четверг, 06.11.2014, 22:12 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Саш, привет.
Код интересный. Недавно было нужно отсортировать два списка, а о нём не вспомнил... Хорошо хоть списков было всего два и по 20-30 наименований.
А объясни мне, к стати, в чём кайф создавать модуль класса только для того, чтобы объявить в нём [vba]
Код
Public value As Variant
Public index As Long
[/vba]да ещё при этом ремарка на Public value работать коду не мешает, т.е. переменная явно лишняя?
-----------------------------
Ну и ещё, конечно, хоть процедура и работает, но совсем не способствует читабельности кода обзывание переменных теми же именами, которые имеют стандартные свойства многих объектов модели...
Да и размещение процедуры в модуле листа вместо стандартного затрудняет его интеграцию в Personal или надстройку.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаш, привет.
Код интересный. Недавно было нужно отсортировать два списка, а о нём не вспомнил... Хорошо хоть списков было всего два и по 20-30 наименований.
А объясни мне, к стати, в чём кайф создавать модуль класса только для того, чтобы объявить в нём [vba]
Код
Public value As Variant
Public index As Long
[/vba]да ещё при этом ремарка на Public value работать коду не мешает, т.е. переменная явно лишняя?
-----------------------------
Ну и ещё, конечно, хоть процедура и работает, но совсем не способствует читабельности кода обзывание переменных теми же именами, которые имеют стандартные свойства многих объектов модели...
Да и размещение процедуры в модуле листа вместо стандартного затрудняет его интеграцию в Personal или надстройку.

Автор - Alex_ST
Дата добавления - 06.11.2014 в 22:12
Формуляр Дата: Пятница, 07.11.2014, 10:59 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Лёша привет,

А объясни мне, к стати, в чём кайф создавать модуль класса только для того, чтобы объявить в нём
не очень помню уже подробности, но смысл был в том, чтобы получить конкретный порядковый индекс каждого элемента Collection (который тот, вроде, не поддерживает). Может, я чего и недотумкал тут. Может, надо было какой другой класс вместо Collection взять...

Public value работать коду не мешает, т.е. переменная явно лишняя?
А без value - никак. Как их иначе отсортировать-то?

не способствует читабельности кода обзывание переменных теми же именами, которые имеют стандартные свойства многих объектов модели...
Тут спорить не стану - не заморачивался. Извиняйте.

Да и размещение процедуры в модуле листа вместо стандартного затрудняет его интеграцию в Personal или надстройку.
Ну, не расчитывал, на такую постоянную востребованность. Для эпизодического использования, проще 1 лист в нужный файл перетащить. А для людей, подключающих макросы через Personal, скопировать текст кода, уверен, проблемой не будет. :)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Пятница, 07.11.2014, 11:01
 
Ответить
СообщениеЛёша привет,

А объясни мне, к стати, в чём кайф создавать модуль класса только для того, чтобы объявить в нём
не очень помню уже подробности, но смысл был в том, чтобы получить конкретный порядковый индекс каждого элемента Collection (который тот, вроде, не поддерживает). Может, я чего и недотумкал тут. Может, надо было какой другой класс вместо Collection взять...

Public value работать коду не мешает, т.е. переменная явно лишняя?
А без value - никак. Как их иначе отсортировать-то?

не способствует читабельности кода обзывание переменных теми же именами, которые имеют стандартные свойства многих объектов модели...
Тут спорить не стану - не заморачивался. Извиняйте.

Да и размещение процедуры в модуле листа вместо стандартного затрудняет его интеграцию в Personal или надстройку.
Ну, не расчитывал, на такую постоянную востребованность. Для эпизодического использования, проще 1 лист в нужный файл перетащить. А для людей, подключающих макросы через Personal, скопировать текст кода, уверен, проблемой не будет. :)

Автор - Формуляр
Дата добавления - 07.11.2014 в 10:59
SBRoot Дата: Вторник, 19.05.2015, 19:55 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день друзья ,
зарание извиняюсь если пишу не там или не в тему я новичок на форуме и у меня вопрос по сортировке данных помогите пожалуста решить проблему.
есть два файла которые нужно объединить исходя из совпадения имени и фамилия файл 1 является экстрактом из Word и поэтому в таблице B помимо имени есть еще информация , но мне нужно сортировать два файла исходя именно из этих имен.
зарание спасибо
[p.s.]так как размеры файлов несколько велики их невозможно прикрепить здесь ,вут линк на скачивание[/p.s.]
Удалено администрацией. Нарушение Правил форума
[moder]Читаем Правила форума создаём свою тему в соответствующем разделе, прикладываем НЕБОЛЬШОЙ файл-пример[/moder]


Сообщение отредактировал Pelena - Вторник, 19.05.2015, 20:16
 
Ответить
СообщениеДобрый день друзья ,
зарание извиняюсь если пишу не там или не в тему я новичок на форуме и у меня вопрос по сортировке данных помогите пожалуста решить проблему.
есть два файла которые нужно объединить исходя из совпадения имени и фамилия файл 1 является экстрактом из Word и поэтому в таблице B помимо имени есть еще информация , но мне нужно сортировать два файла исходя именно из этих имен.
зарание спасибо
[p.s.]так как размеры файлов несколько велики их невозможно прикрепить здесь ,вут линк на скачивание[/p.s.]
Удалено администрацией. Нарушение Правил форума
[moder]Читаем Правила форума создаём свою тему в соответствующем разделе, прикладываем НЕБОЛЬШОЙ файл-пример[/moder]

Автор - SBRoot
Дата добавления - 19.05.2015 в 19:55
Мир MS Excel » Вопросы и решения » Готовые решения » "Параллельная" сортировка списков (Макрос для сравнения и синхронизации списков)
  • Страница 1 из 1
  • 1
Поиск:

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