|
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 16
|
|
Excel Сравнение двух таблиц в разных книгах20.04.2020, 18:13. Показов 5023. Ответов 27
Метки нет (Все метки)
Ребят, дилемма, ни как не могу сообразить, как это можно сделать.
Есть 2-ве книги; Есть 2-ве таблицы; Нужно сравнить эти таблицы и вывести на против подходящего условия нужную фразу Условие: Пускай столбец А:A в книге 1 будет (x), а во второй книге (xy). (описываю просто пример для понимания логики сравнения) Тогда получается: If x=xy and x.offset(0,2)=xy.offset(0,2) and (x.offset(0,7)-xy.offset(0,2) "тут должно быть по модулю")<12 then If x.offset(0,13)>0 then x.offset(0,13)= x.offset(0,13)+1 Else: x.offset(0,13)=1 end if Else: " " end if Nexs Прикрепляю файл для понимания, какого рода таблицы находятся в книгах, на самом деле она на много больше и строк там под 5000тыс. Может кто поможет написать какой ни будь приметив на базе этого, там я уж попробую допилить под все свои нюансы.
0
|
|
| 20.04.2020, 18:13 | |
|
Ответы с готовыми решениями:
27
Сравнение двух колонок в разных книгах и вывод несовпадающих значений в отдельную книгу Сравнение двух таблиц на разных листах Можно ли синхронизировать данные в двух разных книгах |
|
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 16
|
|
| 20.04.2020, 21:09 [ТС] | |
|
0
|
|
|
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
|
||||||
| 20.04.2020, 21:54 | ||||||
|
decst,
По вашему описанию как-то так: Кликните здесь для просмотра всего текста
0
|
||||||
|
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
|
|
| 20.04.2020, 22:25 | |
|
decst, проблема-то в чём, кроме того что в строке Else: " " надо что-то поставить, например, x.offset(0,13)=2 и вместо Nexs может Next, но тогда впереди должен быть цикл? никак не могу, напротив, намного больше, какой-нибудь примитив - не многовато ли ошибок русского языка?
Добавлено через 30 минут И сравнение как делать, каждую строку первой книги с каждой во второй, если совпадение, то что делаем? Так как строк много, то можно ли сортировать таблицы, чтобы поиск ускорить? И совпадений может быть одно или несколько?
0
|
|
|
Заблокирован
|
|
| 21.04.2020, 06:08 | |
|
Жуть. Burк не помнит Алису? И жору военного хакера? Всем хана получается?
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 16
|
|
| 21.04.2020, 07:57 [ТС] | |
|
Burk, Ошибок очень много не спорю...., стыдно стыдно...
Каждую строку в первой с каждой во второй, совпадений может быть несколько только из за одного условия, (x.offset(0,7)-xy.offset(0,7) "тут должно быть по модулю")<12. Таблицы можно сортировать. Если произошло совпадение по заданному условию, то в первой таблице нужно в определённую ячейку (в этой строчке пускай в нашем примере это будет столбец L:L) внести значение которое определяется дополнительным условием (если во второй книге в совпавшей строчку в этой ячейке пусто (или стоит 0), то мы в первой книге ставим 1, а если во второй книге уже стоит 1, то в первую книгу вносим 2 и т.д. (ну получается +1 ) ну это конечно наверное уже полный ппц, поэтому можно и просто внести слово "ПОВТОР" либо "1", короче не имеет значение лишь бы был опознавательный знак.
0
|
|
|
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
|
|
| 21.04.2020, 11:24 | |
|
decst,
Вы мой код протестировали?
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 16
|
|
| 21.04.2020, 12:19 [ТС] | |
|
Narimanych, Вообще, да. Спасибо.
Но он ругается на условие когда разница двух значений в книгах, меньше 12. и потом ещё он спотыкается на первом же совпадении. Я специально строчку одну делал одинаковой в разных частях таблицы и он определял только первую сверху. А так в этом коде что то есть, не стал пробовать прикручивать к нему ещё Application.GetOpenFilename и тестировать на полноразмерных таблицах., но что то в нем есть.
0
|
|
|
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
|
||||||
| 21.04.2020, 15:19 | ||||||
|
decst,
Кликните здесь для просмотра всего текста
0
|
||||||
|
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
|
||||||
| 21.04.2020, 18:30 | ||||||
|
decst, вариант с сортировкой, должен работать заметно быстрее на достаточно больших массивах данных.
Этот код надо поместить в программный модуль Основного (первого) файла и загружать его первым. Потом вторым загружаете файл, в котором ищем совпадения. Проверьте на достаточно большом массиве. Будут проблемы, пишите. Я проверил на данных, которые вы прислали (20 строк). Предполагается, что Данные в обоих файлах находятся на первом листе. В первой строке имена столбцов, данные начинаются со второй строки. Запускается макросом proba
0
|
||||||
|
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 16
|
|
| 21.04.2020, 18:42 [ТС] | |
|
Burk, Ух ты... щас разберусь и попробую тогда.
Обязательно отпишусь по результату. Я бы сюда и загрузил именно те файлы на которых я работаю, но они весят по боле 100кб
0
|
|
|
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
|
|
| 21.04.2020, 18:48 | |
|
decst, забыл, тут вот ещё что непонятно: Если возможно не одно совпадение, то нашли первое, посмотрели какое значение в столбце L у второго файла, прибавили единицу к нему и занесли в L первой книги. А потом встретилось совпадение условий во второй раз с той же строкой первого файла и предыдущее занесение затрется новым???
100кб не страшно, можно заархивировать
0
|
|
|
Заблокирован
|
|
| 21.04.2020, 18:58 | |
|
ввв
0
|
|
|
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
|
|||||||||||
| 21.04.2020, 19:21 | |||||||||||
|
decst, небольшая ошибочка в коде в строке 34 (переделывал, но пропустил в одном месте) Вместо
decst, и ещё - строку 50 лучше записать так
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 16
|
|
| 21.04.2020, 19:41 [ТС] | |
|
Burk, в общем, вот это на данный момент 3 моих реальных файла.
январь, февраль, март. (естественно, когда закроется апрель, то появится и апрель и т.д.) я постоянно провожу сравнения (ежемесячно) обычно я это делаю танцами с бубнами через СЦЕПИТЬ потом ВПР следом выясняю разницу по метражу (так как у нас считается, что неисправность повторилась если разница с предыдущим месяцем(проходом вагона) +-12 метров эту величину можно уменьшить предположим ну до 6 метров "в нашем случае") Следовательно в этих файлах я провожу сравнение по (КОДНАПРАВ); (ПУТЬ); (КМ); (ПК); (М)-разница в метражах; (ОТСТУПЛЕНИЕ). Для внесения признака совпадения можно использовать столбец (БАЛЛ)-так как в данной версии выгрузки данных он не несёт ни какой смысловой характеристики. Так же для уменьшение вариантов перебора, можно перебирать и сравнивать только те строки в столбце которых стоит "0"-это столбцы (?) и (СТРЕЛКА). По поводу нескольких совпадений пускай наверное затирается, так то если мы уменьшим условие по разнице то их будет наименьшее количество мне так кажется. Блин наверное это очень сложно воплотить в VBA с такими нюансами. https://yadi.sk/d/VEqGX6CAINz1Vw Добавлено через 13 минут Burk, Сравнение проводится с прошлым месяцем февраль с январём март с февралём поэтому и нужно условие записи +1 так как ОТСТУПЛЕНИЕ может повторяться из месяца в месяц одно и то же, и надо понимать сколько раз уже оно повторилось.
0
|
|
|
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
|
|
| 22.04.2020, 06:56 | |
|
decst, давайте будем последовательно определять ваши непонятки
шапки файлов, которые вы прислали сейчас (январь 2020) КОД ПЧ ГОД МЕСЯЦ ДЕНЬ ПС ВИД КОДНАПРВ ПД Перегон ПУТЬ КМ ПК М ОТСТУПЛЕНИЕ СТЕПЕНЬ АМПЛИТУДА ДЛИНА БАЛЛ КОЛИЧЕСТВО СК_ОГР_ПАСС СК_ОГР_ГРУЗ СК_УСТ_ПАСС СК_УСТ_ГРУЗ HOPMA УСЛРАСЧЕТА КР ДЗ T+ З ИС ур.пр ?прж ? СТРЕЛКА ОБК МОСТ + - н.р. ИЗМ PR_PREDUPR UPDATTR РАСШИФРОВКА КОДОТСТУП EXCLUDE в файле, присланном ранее в теме КОДНАПРВ ПД ПУТЬ КМ ПК М ОТСТУПЛЕНИЕ СТЕПЕНЬ АМПЛИТУДА ДЛИНА КОЛИЧЕСТВО Ну и какие столбцы надо сравнивать? Сейчас сравнение по номерам столбцов, но номера в этих двух файлах не соответствуют их именам. Можно сравнивать по именам в заголовке, тогда не важно в каком номере столбца они находятся. Поэтому пришлите порядок сравнения по именам столбцов, в присланном сейчас файле, и обойдёмся без Offset. Надо вставить столбец, например, ПризСовп (признак совпадения +1), а то сейчас заносится в столбец L, а там у вас какие-то данные другие и они затрутся. Поэтому давайте определимся с этими вопросами, а потом будем уточнять дальнейшее. Надо сразу в теме выкатывать файл, с которым собираетесь работать, а не делать какие-то выжимки из него. Добавлено через 55 минут decst, совет - чтобы шапка (первая строка с именами столбцов) не уходила с экрана Вид-Закрепить области -Закрепить верхнюю строку.
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 16
|
|
| 22.04.2020, 07:37 [ТС] | |
|
Burk, изначально не додумался на файлообменник закинуть просто.
По факту мне всё равно как будет проходить процесс, если будет нужный результат. 1)КОДНАПРАВ-равенство 2)ПУТЬ-равенство 3)КМ-равенство 4)Отступление-равенство 5)ПК-равенство 6)М-разница по модулю (<6-так проще будет) ____ Желательно диалоговое окно для выбора файла для сравнения. ну и естественно чтоб макрос работал из общей книги макросов. ____ На словах вроде всё так просто, а как компьютер заставить думать так же, в этом уже проблема Добавлено через 5 минут Burk, да, давайте создадим отдельный столбик "ПОВТОР", для удобства
0
|
|
|
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
|
|
| 22.04.2020, 19:58 | |
|
decst, будем двигаться поэтапно. Теперь вы можете задавать имена столбцов для сравнения и порядок сравнения самостоятельно. Для этого нужно в макросе ClearL в строке Arr=Array(имена колонок как строковые через запятую) расставить их в нужном вам порядке. И всё. Делайте как у меня. Там два файла - Основной с макросом (xlsm) и файл для поиска (xlsx). Макрос proba1. Во второй файл я скопировал первый и для проверки первую строку повторил. Всё работает. Проверьте более детально. Блок выбора файлов из папки сделаю чуть позже. А вот прописать макросы в программный файл, если речь идет о Надстройке, я пока не решил буду ли делать. Приблизительно знаю как, но мне это было не нужно и я этого не делал. Если рядом с вами есть люди, занимающиеся такими вещами, то лучше обратиться к ним, сделают за 15 минут.
Можно проще - поместить программу в пустой экселевский файл и сделать на пустом листе кнопку запуска, под которой будет выбор файлов, загрузка их и запуск макроса сравнения. Это для меня не проблема. Имена колонок и в Array долны быть одинаковы.
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 16
|
||||||
| 22.04.2020, 20:27 [ТС] | ||||||
|
Burk, Щас постараюсь разобраться.
Нет вы что, какая надстройка, это наглость уже с моей стороны. Я имел ввиду чтоб работало из "Личной книги макросов" чтоб не быть привязанным к определённой книге. Обычно я решал этот вопрос загоняя рабочую книгу в переменную. Добавлено через 12 минут Burk, Скачав файлы, открыв сначала "Основную книгу" потом открыв "Сравнить вторая", возвращаюсь в "Основная книга" запуускаю proba1 и он на
Наверное я дурак.
0
|
||||||
|
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
|
|||||||
| 23.04.2020, 05:25 | |||||||
|
decst, запустил несколько раз раз, всё работает. поставьте на всяк случай в макросе SortAC_F точку в следующей строке, хотя у меня и так работает
нажимаете на неё и подводите курсор к переменным Ch и потом к Last. Других там нет. Вы увидите их значения. Сообщите мне их. А вы в файле ничего не меняли? Если меняли, то пришлите мне изменённый. Какая у вас версия офиса? Да, забыл сказать, столбец М должен быть последним в списке Array и в нём указывается значение, меньше которого должна быть разность. Добавлено через 11 минут Были у меня такие хохмы, когда у меня шло, а у человека нет. У меня старенький ноут, а какая техника у вас (скорость процессора) и версии винда и офиса? Добавлено через 6 минут после строк, которые вы мне прислали, перед Next поставьте такую строку DoEvents опять же на всяк случай.
0
|
|||||||
| 23.04.2020, 05:25 | |
|
Помогаю со студенческими работами здесь
20
Сравнение ячеек в разных книгах Excel Сравнение таблиц с разных файлов Сравнение двух таблиц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|