Страницы: 1
RSS
VBA. Простые способы сравнения 2 таблиц
 
Добрый день.
Помогите, пож, по ситуации.  Раньше когда сравнивал несколько одинаковых таблиц (с одинаковыми столбцами, пусть и последовательность столбцов разная, и одинаковым количеством строк) делал простую проверку контрольной суммой, это хоть и не точно, но устраивало на больших таблицах - числа дробные и вероятность случайного совпадения итоговых сумм была небольшая и меня устраивала
Этот подход и сейчас бы меня устраивал, особенно меня очень подкупает его простота, незамороченность и универсальность (можно применять на любых достаточно больших числовых таблицах). Но теперь появились еще и столбцы с текстовыми ячейками... и их тоже надо проверить. Единственное, что мне приходит в голову это каждый текстовый столбец проверять ячейка за ячейкой... И придется так и поступить, если вы не поможете мне найти другой подход... Было очень хорошо, если бы каким-то образом сохранить старый подход и его плюсы, только обойти как-то эту проблему с текстовыми столбцами в VBA
Изменено: Ливиан - 23.10.2019 09:12:53 (уточнил)
 
Добрый день! Лучше будет если вы скажите для чего это делаете и каков желаемый результат, а также приложите небольшой файл с примером. Возможно вам предложат более быстрое решение вопроса....
 
Нужно для быстрого сравнения нескольких больших таблиц, столбцы одинаковые, порядок столбцов может различаться. Пример прикладываю, нужно, чтобы ячейка с Истиной меняла свое значение на Ложь, не только когда меняется число во второй таблице (как сейчас), но и когда меняется текст, например, помидоры на персики
Изменено: Ливиан - 23.10.2019 09:10:23 (опечатка)
 
Добрый день.
формула массива для контрольной суммы таблицы 1:
Код
=СУММ(ЕСЛИОШИБКА(КОДСИМВ(ПСТР(A2:A4;СТРОКА(A1:A99);1));0);ЕСЛИОШИБКА(КОДСИМВ(ПСТР(B2:B4;СТРОКА(A1:A99);1));0);C2:C4;D2:D4)

для таблицы 2:
Код
=СУММ(ЕСЛИОШИБКА(КОДСИМВ(ПСТР(H2:H4;СТРОКА(A1:A99);1));0);ЕСЛИОШИБКА(КОДСИМВ(ПСТР(J2:J4;СТРОКА(A1:A99);1));0);G2:G4;I2:I4)

идея формулы - превращение букв в числовые значения кодов этих букв, затем сложение.
Ввод формулы массива заканчивать одновременными Ctrl+Shift+Enter
Кому решение нужно - тот пример и рисует.
 
Не силен в формулах массива, может делаю что то не то, если помидор например заменить "поми" или "пом" - дает все равно Истину
Но если помидор заменить на "п" - работает и дает Истину
 
Да, действительно... тогда предлагаю по тому же принципу с доп.столбцами (в файле выделено цветом).
Кому решение нужно - тот пример и рисует.
 
Цитата
Пытливый написал:
идея формулы - превращение букв в числовые значения кодов этих букв, затем сложение.
очень понравилась эта идея. в excel получил коды для алфавита, и к сожалению понял, что погрешность будет очень высокая, если суммировать коды букв. Например, код буквы а = 224, код б = 225, в = 226... Если складывать коды,  слово "аг" = 451 и "бв" = 451. Т.е. тут уже не маленькая вероятность случайного совпадения
 
Ну, вы же номенклатуру не будете 2 буквами обозначать, правда? В этом случае % возможного случайного совпадения суммы кодов снижается многократно. Ну, или тогда через доп.столбцы приравнивать ячейки, содержащие текстовые данные, получаем Истина (совпадает), или ЛОЖЬ (не совпадает). И затем в итоговой формуле считать, сколько ЛОЖЬ в доп.столбцах. Если >0 - алярм.

Типа такой итоговой формулы массива (доп.столбцов не надо):
Код
=ЕСЛИ(ИЛИ(СЧЁТЗ(A2:A4)-СУММ(--(A2:A4=I2:I4))>0;СЧЁТЗ(B2:B4)-СУММ(--(B2:B4=K2:K4))>0);"ЕСТЬ ОТЛИЧИЕ";"Совпадение")
Изменено: Пытливый - 23.10.2019 09:51:02
Кому решение нужно - тот пример и рисует.
 
Ливиан, Я правильно понимаю, что одинаковая сортировка обеих таблиц и последующий построчный поиск до первого различия Вас не устраивает?
 
сама идея классная. нужно только что-то поточнее чем суммирование кодов. пока приходит на ум склеивать, например "аг" = 224227
Спасибо за помощь. Попробую пойти этим путем
 
Не увидел предыдущие комментарии, сейчас попробую макросом
Изменено: Андрей_26 - 23.10.2019 10:03:10
 
Посмотрите формулу через построчное сравнение (см.мое сообщение #8 )
Изменено: Пытливый - 23.10.2019 10:01:43
Кому решение нужно - тот пример и рисует.
 
Цитата
IKor написал:
Ливиан , Я правильно понимаю, что одинаковая сортировка обеих таблиц и последующий построчный поиск до первого различия Вас не устраивает?
Цитата
Андрей_26 написал:
А что мешает названия столбцов в двух таблицах сделать одинаковыми ? Тогда можно просто сравнивать построчно

Таблицы большие с формулами, сортировка порушит формулы. Хотя, сейчас пришла мысль, что можно копировать листы значениями и пойти предложенным Вами путем. Может так будет проще, коды тоже хорошая вещь, надо только ее как-то доработать
 
Спасибо всем большое за помощь
Все предложенные варианты работают
 
Таблицы всегда состоят из 4 столбцов и расположены также как в примере?  
Изменено: Андрей_26 - 23.10.2019 10:38:01
 
Цитата
Пытливый написал:
Посмотрите формулу через построчное сравнение (см.мое сообщение #8 )
Спасибо большое, работает
Все варианты работают, буду все использовать в разных ситуациях
 
Цитата
Андрей_26 написал:
Таблицы всегда состоят из 4 столбцов и расположены также как в примере?




нет, таблицы разные от 10 до 100 столбцов, столбцы одинаковые, порядок столбцов разный. количество строк одинаковое
 
Это плохо. Тогда я пас
 
Спасибо еще раз всем
Задача решена разными вариантами, на любой вкус
Страницы: 1
Наверх