Как определить наличие строки в существующем списке.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

Доброго дня!!!

А кто-нибудь может подсказать, как сделать сравнение информации построчно (т.е. чтобы данные в каждой ячейке строки совпадали соответственно)? Никак не могу найти на форуме, помогите.
Допустим на отдельном листе есть одна строка с данными, эти данные надо сравнить со всеми строками на определенном листе, и если совпадение нашлись, то строчку, которая уже содержится на листе, где осуществлялся поиск, - скопировать на тот же лист, где была задана строка для поиска, но через несколько строк ниже.
Если соответствий не найдено, то вывести, допустим строку "Соответствий НЕТ".
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

В приложении "Книга1.zip", к данным на листе "Данные" применена формула, которая подсчитывает количество совпадений между текущей строкой и эталоном.

Код: Выделить всё

=СУММ(ЕСЛИ(Эталон!A$7 :D $7=Данные!A3 :D 3;1;0))
(Введена как формула-массив (Ctrl+Enter), и раскопирована вниз на все данные)
Нетрудно видеть, что строки, где имеет место быть полное совпадение с эталоном отмечены значением 4 (так как 4) поля.

Теперь воспользуемся автофильтром, чтобы прямо online оставить на листе только данные, совпадающие с эталоном.

Это решение гибче макроса, так как позвоялет свободно редактировать эталон и данные, а затем мгновенно получить требуемую выборку даных.
Вложения
Книга1.zip
(2.9 КБ) 44 скачивания
SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

формула, которая подсчитывает количество совпадений между текущей строкой и эталоном. [code писал(а): =СУММ(ЕСЛИ(Эталон!A$7 :D $7=Данные!A3 :D 3]
очень удобно, но у меня почему-то в столбце "Признак", даже для пустрых строк, получаются одинаковые значения???, т.е., допустим
6
6
6
6
...
Всего у меня столбцов 13...
SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

формула, которая подсчитывает количество совпадений между текущей строкой и эталоном.

Код: Выделить всё

=СУММ(ЕСЛИ(Эталон!A$7 :D $7=Данные!A3 :D 3;1;0))
очень удобно, но у меня почему-то в столбце "Признак", даже для пустрых строк, получаются одинаковые значения???, т.е., допустим
6
6
6
6
...
Всего у меня столбцов 13...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Такой результат получится если формула-массив введена на всю высоту таблицы.
Обращаю внимание, что формула должна быть введена как формула-массив в одну ячейку, а уже потом обычным образом раскопирована на все остальные ячейки.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

А я бы добавил в лист колонку с функцией считающей что нибудь вроде CRC32 по столбцам
с данными. А ещё лучше рассчитывать СRC32 по строке при изменении ячеек.
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Не понял, зачем CRC?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

зачем CRC?
Что бы вместо кучи значений сравнивать одно. CRC32 отлично трансформирует значения из ячеек строки в уникальный ID строки
Андрей Энтелис,
aentelis.livejournal.com
Ответить