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

Вход

Регистрация

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

 

= Мир MS Excel/попарное сравнение - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
попарное сравнение
megavlom Дата: Понедельник, 17.10.2011, 16:38 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Здравствуйте.Снова обращаюсь к Вам за помощью.Есть хороший макрос (я его немного уменьшил) ,но необходимо условие- проверка на наличие в дополнительном массиве- попарно.На программфоруме -увидел мысль,что можно сделать такое с помощью счетчика на словаре.
К сообщению приложен файл: 1496364.xls (52.5 Kb)
 
Ответить
СообщениеЗдравствуйте.Снова обращаюсь к Вам за помощью.Есть хороший макрос (я его немного уменьшил) ,но необходимо условие- проверка на наличие в дополнительном массиве- попарно.На программфоруме -увидел мысль,что можно сделать такое с помощью счетчика на словаре.

Автор - megavlom
Дата добавления - 17.10.2011 в 16:38
RAN Дата: Понедельник, 17.10.2011, 20:35 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Просто массивы
К сообщению приложен файл: 000.xls (61.0 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПросто массивы

Автор - RAN
Дата добавления - 17.10.2011 в 20:35
megavlom Дата: Понедельник, 17.10.2011, 21:21 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Уважаемый RAN. проблема в том, что при больших числах макрос выдаст большое количество комбинаций(ведь надо не весь файл ,малую часть).На таких массивах это будет очень долго.Следующая проблема: при rez большем ,чем 65000 макрос выдает ошибку.Ставил экс 2007,не помогает.Вот потому и надо вставить эту проверку в сам перебор.Ваш же вариант предполагает выгрузку перебора,а потом сравнение.
 
Ответить
СообщениеУважаемый RAN. проблема в том, что при больших числах макрос выдаст большое количество комбинаций(ведь надо не весь файл ,малую часть).На таких массивах это будет очень долго.Следующая проблема: при rez большем ,чем 65000 макрос выдает ошибку.Ставил экс 2007,не помогает.Вот потому и надо вставить эту проверку в сам перебор.Ваш же вариант предполагает выгрузку перебора,а потом сравнение.

Автор - megavlom
Дата добавления - 17.10.2011 в 21:21
nerv Дата: Вторник, 18.10.2011, 08:56 | Сообщение № 4
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

RAN, Классный смайл up


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеRAN, Классный смайл up

Автор - nerv
Дата добавления - 18.10.2011 в 08:56
Michael_S Дата: Вторник, 18.10.2011, 10:00 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Quote (megavlom)
Следующая проблема: при rez большем ,чем 65000 макрос выдает ошибку.Ставил экс 2007,не помогает.

Так и пересохранить нужно в .xlsx, а не просто открыть в 2007.
 
Ответить
Сообщение
Quote (megavlom)
Следующая проблема: при rez большем ,чем 65000 макрос выдает ошибку.Ставил экс 2007,не помогает.

Так и пересохранить нужно в .xlsx, а не просто открыть в 2007.

Автор - Michael_S
Дата добавления - 18.10.2011 в 10:00
nilem Дата: Вторник, 18.10.2011, 10:29 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Из спортивного интереса заменил в Sub ertert(x, y) коллекцию на модный теперь Filter (привет Сереге smile ).
Попробуйте на больших диапазонах - быстрее, чем с коллекцией?
Насчет "при rez большем ,чем 65000 макрос выдает ошибку" - посмотрите в самом верху модуля
Code
Option Explicit
Dim rez&(1 To 60000, 1 To 6), j&

60000 замените на 1000000, например. Но тогда, чтобы выгрузить весь массив, потребуется Ексель 2007/10.
Попарную проверку не делал. Наверное, не стоит внедрять доп. проверку, а сделать еще процедуру или функцию. Нужен примерчик покрупнее.
К сообщению приложен файл: _000.zip (26.1 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеИз спортивного интереса заменил в Sub ertert(x, y) коллекцию на модный теперь Filter (привет Сереге smile ).
Попробуйте на больших диапазонах - быстрее, чем с коллекцией?
Насчет "при rez большем ,чем 65000 макрос выдает ошибку" - посмотрите в самом верху модуля
Code
Option Explicit
Dim rez&(1 To 60000, 1 To 6), j&

60000 замените на 1000000, например. Но тогда, чтобы выгрузить весь массив, потребуется Ексель 2007/10.
Попарную проверку не делал. Наверное, не стоит внедрять доп. проверку, а сделать еще процедуру или функцию. Нужен примерчик покрупнее.

Автор - nilem
Дата добавления - 18.10.2011 в 10:29
megavlom Дата: Вторник, 18.10.2011, 11:47 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Здравствуйте Форумчане.Michael_S спасибо за подсказку- этого нюанса не знал( 2007 и установил для этого макроса- проверить).Nilem ещё раз спасибо Вам за этот макрос (условия остались прежними,когда Вы его писали.Только в части проверки словарем нужно было делать сортировку по горизонтали: а так он медленно работает,поэтому и приходится пробовать по другому.Тем более один товарищ на форуме подсказал идею. Если теперь с выгрузкой нормально,то останется словарем проверять на наличие пары цифр в каждой комбинации либо попробовать как RAN предложил :что быстрее.) Но протестировать смогу только завтра.
 
Ответить
СообщениеЗдравствуйте Форумчане.Michael_S спасибо за подсказку- этого нюанса не знал( 2007 и установил для этого макроса- проверить).Nilem ещё раз спасибо Вам за этот макрос (условия остались прежними,когда Вы его писали.Только в части проверки словарем нужно было делать сортировку по горизонтали: а так он медленно работает,поэтому и приходится пробовать по другому.Тем более один товарищ на форуме подсказал идею. Если теперь с выгрузкой нормально,то останется словарем проверять на наличие пары цифр в каждой комбинации либо попробовать как RAN предложил :что быстрее.) Но протестировать смогу только завтра.

Автор - megavlom
Дата добавления - 18.10.2011 в 11:47
megavlom Дата: Среда, 19.10.2011, 12:25 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Здравствуйте. Michael_S действительно,если пересохранить в другом формате, можно увеличить количество строк при выгрузке.Nilem попробовал Ваш новый вариант- чуть дольше считает и допускает ошибки(не все варианты расчитывает),поэтому лучше старый.А дополнение со словарем попробую сделать сам.Большое Вам спасибо.Если что то не пойму ,придется снова Вас беспокоить.
 
Ответить
СообщениеЗдравствуйте. Michael_S действительно,если пересохранить в другом формате, можно увеличить количество строк при выгрузке.Nilem попробовал Ваш новый вариант- чуть дольше считает и допускает ошибки(не все варианты расчитывает),поэтому лучше старый.А дополнение со словарем попробую сделать сам.Большое Вам спасибо.Если что то не пойму ,придется снова Вас беспокоить.

Автор - megavlom
Дата добавления - 19.10.2011 в 12:25
megavlom Дата: Пятница, 21.10.2011, 16:36 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Здравствуйте.Все же пришлось беспокоить.На Dictionary для уникальности приходится делать связку &"|"& нескольких ячеек(6) ,а во втором массиве две ячейки.Как прописать проверку на наличие двух ячеек(цифр) в строке из шести ячеек(цифр).
К сообщению приложен файл: 4321814.xls (56.0 Kb)
 
Ответить
СообщениеЗдравствуйте.Все же пришлось беспокоить.На Dictionary для уникальности приходится делать связку &"|"& нескольких ячеек(6) ,а во втором массиве две ячейки.Как прописать проверку на наличие двух ячеек(цифр) в строке из шести ячеек(цифр).

Автор - megavlom
Дата добавления - 21.10.2011 в 16:36
Hugo Дата: Пятница, 21.10.2011, 22:32 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Если не смотреть файл, то ответ простой - Instr("строка из шести ячеек(цифр)","строка из двух ячеек(цифр)")
Если больше 0, то содержит.
Но посмотрел файл - нет, в словаре Вы так, как начали делать, совпадение не найдёте.
Разве что если циклом проверять каждый ключ на Instr().


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЕсли не смотреть файл, то ответ простой - Instr("строка из шести ячеек(цифр)","строка из двух ячеек(цифр)")
Если больше 0, то содержит.
Но посмотрел файл - нет, в словаре Вы так, как начали делать, совпадение не найдёте.
Разве что если циклом проверять каждый ключ на Instr().

Автор - Hugo
Дата добавления - 21.10.2011 в 22:32
megavlom Дата: Пятница, 21.10.2011, 23:22 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

HUGO спасибо.Буду дальше пробовать,а заодно и изучать.Ну и посмотрю на разных сайтах способы.
 
Ответить
СообщениеHUGO спасибо.Буду дальше пробовать,а заодно и изучать.Ну и посмотрю на разных сайтах способы.

Автор - megavlom
Дата добавления - 21.10.2011 в 23:22
Michael_S Дата: Суббота, 22.10.2011, 00:27 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Который раз тему открываю - честно говоря, не могу понять конечной задачи.
И сходных данных - каковы пределы.
 
Ответить
СообщениеКоторый раз тему открываю - честно говоря, не могу понять конечной задачи.
И сходных данных - каковы пределы.

Автор - Michael_S
Дата добавления - 22.10.2011 в 00:27
megavlom Дата: Суббота, 22.10.2011, 10:37 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Здравствуйте Michael_S.Я спрашиваю по работе макросов,функциями листа эту задачу не решить- большой размер файла и время пересчета (пробовал).Наметился другой алгоритм решения этой задачи,да и спасибо Hugo за подсказку( интереса ради надо попробывать).Вопросы по этой теме уже задавать не буду.Спасибо Вам всем.
 
Ответить
СообщениеЗдравствуйте Michael_S.Я спрашиваю по работе макросов,функциями листа эту задачу не решить- большой размер файла и время пересчета (пробовал).Наметился другой алгоритм решения этой задачи,да и спасибо Hugo за подсказку( интереса ради надо попробывать).Вопросы по этой теме уже задавать не буду.Спасибо Вам всем.

Автор - megavlom
Дата добавления - 22.10.2011 в 10:37
Michael_S Дата: Суббота, 22.10.2011, 13:12 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Quote (megavlom)
спрашиваю по работе макросов,

Так я и хотел макросом попробовать свой алгоритм, которым я решал подобные задачи еще на Z-Spectrum, c 48 kB памяти....
Только не уверен, что правильно понял задачу, а также необходимо знать максимальное число.
 
Ответить
Сообщение
Quote (megavlom)
спрашиваю по работе макросов,

Так я и хотел макросом попробовать свой алгоритм, которым я решал подобные задачи еще на Z-Spectrum, c 48 kB памяти....
Только не уверен, что правильно понял задачу, а также необходимо знать максимальное число.

Автор - Michael_S
Дата добавления - 22.10.2011 в 13:12
Hugo Дата: Суббота, 22.10.2011, 13:29 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
off - Я тоже на Spectrum работу делал - вёл подсчёт и распечатку квитков жильцам многоквартирного дома для одной домохозяйки (тогда только у нас жильё назад вернули хозяевам).
Тогда вероятно и написал первую программу на Бейсике - точно не помню в деталях, но было интересно smile


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщениеoff - Я тоже на Spectrum работу делал - вёл подсчёт и распечатку квитков жильцам многоквартирного дома для одной домохозяйки (тогда только у нас жильё назад вернули хозяевам).
Тогда вероятно и написал первую программу на Бейсике - точно не помню в деталях, но было интересно smile

Автор - Hugo
Дата добавления - 22.10.2011 в 13:29
megavlom Дата: Воскресенье, 23.10.2011, 14:31 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Здравствуйте.ИЗВИНИТЕ меня Michael_S .Я на этом сайте с полгода и видел, что Вы очень хорошо умеете оперировать с функциями,но вот с макросами ...Если задача:на лист будут выгружатся комбинации разных цифр по 6 в строке(может до 800 тыс) .Есть второй массив из двух столбцов:т.е. по 2 цифры в строке.Надо сравнить второй массив с первым построчно.Если в строке первого будет совпадение двух цифр из любой строки второго массива,то эту строку (1) массива не считать- удалить.Мах число 97. Но это все долго.Я нашел другой алгоритм с find или с match.пока пытаюсь их приспособить.Еще раз прошу меня извинить.
 
Ответить
СообщениеЗдравствуйте.ИЗВИНИТЕ меня Michael_S .Я на этом сайте с полгода и видел, что Вы очень хорошо умеете оперировать с функциями,но вот с макросами ...Если задача:на лист будут выгружатся комбинации разных цифр по 6 в строке(может до 800 тыс) .Есть второй массив из двух столбцов:т.е. по 2 цифры в строке.Надо сравнить второй массив с первым построчно.Если в строке первого будет совпадение двух цифр из любой строки второго массива,то эту строку (1) массива не считать- удалить.Мах число 97. Но это все долго.Я нашел другой алгоритм с find или с match.пока пытаюсь их приспособить.Еще раз прошу меня извинить.

Автор - megavlom
Дата добавления - 23.10.2011 в 14:31
Michael_S Дата: Воскресенье, 23.10.2011, 21:32 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Обработка массива более 1 000 000 строк занимает примерно 25 сек. А вот удаление.... в моем примере нужно удалять ~270 000 строк... занимает это... короче очень долго - я не дождался удаления всех
 
Ответить
СообщениеОбработка массива более 1 000 000 строк занимает примерно 25 сек. А вот удаление.... в моем примере нужно удалять ~270 000 строк... занимает это... короче очень долго - я не дождался удаления всех

Автор - Michael_S
Дата добавления - 23.10.2011 в 21:32
Hugo Дата: Воскресенье, 23.10.2011, 22:33 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Как будут выгружаться?
6 в строке - это 5 пар.
Берёте второй массив в словарь (один раз, можно словарь сделать публичным, если код будете запускать много раз), и проверяете 5 раз по словарю наличие этих пар.
Или эти пары - любое сочетание цифр шестёрки? Тогда комбинаций намного больше...
В примере примерно так и сделано, но я не понял - что именно нужно? Что там с цветом - каких комбинаций и где не должно быть?

Пока такую заготовку прикинул - выводит комбинации всех цифр строки - их нужно проверить по словарю?

Code
Sub tt()
Dim a, i&, ii&, x&
a = [k2:p13]
For x = 1 To UBound(a)
For i = 1 To UBound(a, 2)
For ii = 0 To UBound(a, 2) - 1
If (ii + 1) <> i Then Debug.Print a(x, i) & "|" & a(x, ii + 1)
Next ii, i, x
End Sub

Тогда добавить в начале перебор массива A2:B14 и создание словаря, потом вместо debug.print проверку наличия в словаре.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеКак будут выгружаться?
6 в строке - это 5 пар.
Берёте второй массив в словарь (один раз, можно словарь сделать публичным, если код будете запускать много раз), и проверяете 5 раз по словарю наличие этих пар.
Или эти пары - любое сочетание цифр шестёрки? Тогда комбинаций намного больше...
В примере примерно так и сделано, но я не понял - что именно нужно? Что там с цветом - каких комбинаций и где не должно быть?

Пока такую заготовку прикинул - выводит комбинации всех цифр строки - их нужно проверить по словарю?

Code
Sub tt()
Dim a, i&, ii&, x&
a = [k2:p13]
For x = 1 To UBound(a)
For i = 1 To UBound(a, 2)
For ii = 0 To UBound(a, 2) - 1
If (ii + 1) <> i Then Debug.Print a(x, i) & "|" & a(x, ii + 1)
Next ii, i, x
End Sub

Тогда добавить в начале перебор массива A2:B14 и создание словаря, потом вместо debug.print проверку наличия в словаре.

Автор - Hugo
Дата добавления - 23.10.2011 в 22:33
megavlom Дата: Понедельник, 24.10.2011, 13:19 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 105
Репутация: 1 ±
Замечаний: 0% ±

Здравствуйте Уважаемый Hugo.Я уже писал, что тот вариант будет считаться долго.Нашел как сделать по другому,но чтоб реализовать? Дней пять искал по разным форумам: как сделать.Ваш пост дал м i с л ь как - надо все перевернуть.Спасибо за код и Большое Спасибо за намек.Michael_S макросы, которые могут сделать эту работу управляются за три мин.Но для меня это очень долго.Но ничего, думаю скоро управлюсь.Кстати был не прав - на планете встречал Ваши макросы.
 
Ответить
СообщениеЗдравствуйте Уважаемый Hugo.Я уже писал, что тот вариант будет считаться долго.Нашел как сделать по другому,но чтоб реализовать? Дней пять искал по разным форумам: как сделать.Ваш пост дал м i с л ь как - надо все перевернуть.Спасибо за код и Большое Спасибо за намек.Michael_S макросы, которые могут сделать эту работу управляются за три мин.Но для меня это очень долго.Но ничего, думаю скоро управлюсь.Кстати был не прав - на планете встречал Ваши макросы.

Автор - megavlom
Дата добавления - 24.10.2011 в 13:19
Michael_S Дата: Понедельник, 24.10.2011, 13:50 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Quote (megavlom)
макросы, которые могут сделать эту работу управляются за три мин

Я ж говорю - обработка массива более миллиона строк у меня занимает примерно 25 сек. Это я делаю без словарей. На словаре наверно можно еще сократить - примерно до 15-20
А вот удалять строки - у мня почему-то долго. Может экран не отключается, может еще что...
Зы. если у Вас 2000 пар - то практически в каждой строке будут совпадения.
 
Ответить
Сообщение
Quote (megavlom)
макросы, которые могут сделать эту работу управляются за три мин

Я ж говорю - обработка массива более миллиона строк у меня занимает примерно 25 сек. Это я делаю без словарей. На словаре наверно можно еще сократить - примерно до 15-20
А вот удалять строки - у мня почему-то долго. Может экран не отключается, может еще что...
Зы. если у Вас 2000 пар - то практически в каждой строке будут совпадения.

Автор - Michael_S
Дата добавления - 24.10.2011 в 13:50
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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