Всем здравствуйте! Помогите пожалуйста справиться с задачей либо формулами либо макросами, не смог найти решения. Суть такая: есть две таблицы в каждой по 5 столбцов Таблица 1
1
2
3
4
5
6
7
8
9
10
Таблица 2
5
4
3
2
1
10
9
8
7
6
5
7
11
10
9
3
5
9
10
1
необходимо сверить каждую строку таблицы 1 со строками таблицы 2 и найти одинаковые значения, причем в каждой строке нужно сверять все ячейки, чтобы независимо от порядка расположения значений в ячейках таблицы 2 он находил их. т.е. если в таблице 1, в пяти ячейках идет порядок 1 2 3 4 5, а во второй таблице этот порядок будет 5 4 3 2 1 или 5 3 1 4 2, он считает их равными. И еще один момент, в каждой строке не могут повторяться значения, т.е в каждой строке все 5 значений будут разными. Всем заранее благодарен за помощь
Казанский, cgасибо, тоже интересный вариант, о таком я не подумал бы даже, я сначала хотел просто суммировать, но при простом суммировании, могут значения совпасть, а Ваш способ думают тоже подойдет
Одно решение нашел, но там слишком много действий нужно сделать. Но там нужно колдовать со второй таблицей сначала, выставлять значения все по порядку возрастания. Это долгий путь
Я как вариант рассматривал использование наименьший, чтоб выстроить во второй таблице все цифры в порядке по возрастанию, ну а дальше объединить отдельно в первой таблице значения и во второй и пробежаться по значениям с помощью впр
Казанский, cgасибо, тоже интересный вариант, о таком я не подумал бы даже, я сначала хотел просто суммировать, но при простом суммировании, могут значения совпасть, а Ваш способ думают тоже подойдет
АlехМ написал: Протестируйте предложенные формулы на сотни или больше строк в таблице 2
Уже протестировал, конечно виснет страшно)) у меня тысячи строк, но я знал, что будут подвисания, при выполнении всего этого с помощью макроса думаю быстрее бы работало, но к сожалению не умею писать их, похоже долго мне придется ждать расчетов), завис эксель
pvolodya написал: если в таблице 1, в пяти ячейках идет порядок 1 2 3 4 5, а во второй таблице этот порядок будет 5 4 3 2 1 или 5 3 1 4 2, он считает их равными
Следовательно, можно сравнивать суммы пяти ячеек в первой и второй таблицах?
Юрий М написал: Следовательно, можно сравнивать суммы пяти ячеек в первой и второй таблицах?
К сожалению все так просто не выйдет, как пример в первой таблице будут значения 1 2 3 4 10, а во второй 1 2 3 5 9, следовательно сумма будет и в первой и второй одинаковая
Доброе время суток Версия на Power Query. 60000 строк в левой таблице, 50000 в правой - отработало на нетбуке 2011 года за 14 секунд. Левая на листе "Сравнить", правая - "С этой", результат на листе "Отчёт".
Юрий М написал: немного переделал: было много лишних итераций в циклах. Проверьте этот вариант.
Спасибо большое за помощь, но похоже у меня с компом что-то не то или все таки когда несколько тысяч значений, макрос медленно перебирает, нужен наверное более быстрый проц для него, вот что происходит при запуске:
Андрей VG написал: Что-то долго коллега. На тех же моих тестовых данных
Реально быстро, за 5 секунд сверил, но почему то, когда я копирую все свои значения в ваши таблички, очень долго почему то перенос идет и тоже подвисания. Минут по 15-20 переносятся мои данные
Дык у Вас код = оптимизация. У меня = maintainable. Взял комп чуть мощнее. Влупил обеим таблицам по 60 тыщ строк. Закомментил у себя индикацию. Ваш 1,279297, мой 1,671875.
Где-то так и должно было быть. На прирост больше чем в 1,5 раза и не рассчитывал. По факту, ы на ПК с процессором, разгоняемым до 3,4Ггц тестировали? Странно, что данным ТС отношение такое. У него ваш 108 секунд, мой 5. Что до правильности обслуживаемости кода. Ну, не считаю столь тщательную разбивку кода особо нужной. Зачем выносить swap в отдельную функцию? Там временные затраты на вызов и возврат сопоставимы с действием - зачем тратить время? У себя бы, с точки зрения переиспользования кода, вынес бы в функцию получение ключа по упорядоченным значениям строки. К стати, ваш код
Код
For x = LBound(arr_2d, 2) To UBound(arr_2d, 2)
str = str & CStr(arr_2d(y, x))
Next
arr_2d_String(y, 1) = str
не будет ли ошибки в такой сцепке. Положим одна строка 2; 2123; 4999, а другая 22;123; 4999 - обе будут иметь один и тот же ключ словаря при прямой сцепке после сортировки.
Цитата
pvolodya написал: Минут по 15-20 переносятся мои данные
В данные вставляете как значения или вместе со всеми формулами? Вполне они могут тормозить. В представленной книги автопересчёт формул включен.