Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
С каждым днем размеры массивов продолжают расти, поэтому продолжил искать способы ускорить проводимую сверку по дублям. В настоящее время скорость работы макроса увеличилась в 2 раза, в пределах 25-30 минут обрабатывается массив состоящий из 318 тыс. строк. Тема активно продолжается, думаю скоро время выполнения этой задачи сократится еще.

Я прикрепляю тестовый файл с 2  вариантами макросов и результатом работы формул для сравнения. Однако всеравно, что макросы что формулы не выполняют 100% необходимую задачу.  По мере поиска решений, буду размещать их сюда.

https://www.excel-vba.ru/forum/index.php?topic=6506.0
Изменено: Камиль Гусейнов - 29.03.2021 09:53:57
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Проверил все предложенные способы на небольшом массиве, если ориентироваться по ранее полученным результатам с использованием формул, самый точный т.е идентичный формулам при этом намного быстрее их работающий, макрос  написанный New.
Вариант предложенный Антон на pq, при переносе своих данных в таблицу действительно, то что делается формулами порядком 10 минут, делает практически за минуту но результат отличается вместо 294 дубля показывает 77.
Вариант предложенный Jack Famous работает тоже быстро порядком 2 минут, но вначале комп зависает потом отходит, и находит тоже чуть меньше 200 дублей, но на большом массиве данных, в течении 40 минут оставлял, как завис так и не пришел в себя.

Вам всем огромное спасибо за оказанную мне помощь!!!  
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Сейчас попробую в скаченную форму Duples свои данные подставить и запустить, подправил в ней в модуле Macro только диапазон = Range("A2:J247308")

Как давлю кнопку выполнить макрос, зависает Excel, показывает нагрузка на процессор 15%. Могу оставить так на часок, может оживет?
Изменено: Камиль Гусейнов - 12.02.2021 20:55:44
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Jack Famous,  не как не могу запустить макрос, немного подкорректировал
= Range("A2:J247308").Value  (вместо = Range("A2:J25").Value)
изменил столбцы как в моей таблице не тестовой:
colKey = 2  ' номер столбца с идентификатором
colF = 6    ' фамилия
colI = 7    ' имя
colO = 8    ' отчество
colDate = 9 ' ДР

Желтым подсвечивается Sub FindDuples()  название макроса и ошибка.
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Jack Famous, обязательно, сегодня вечером сделаю и отпишусь, как раз файл есть 247 308 строк.
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
New, Спасибо впредь буду знать!!!
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
 Антон, Я если чесно сильнее запутался, а как нужно было его применять? Тот код, что Вы написали.
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Антон, Возможно, что то не так делал. Я на другом компьтере дома тоже попробую, отпишусь.

Картинки удалены - превышение допустимого размера вложения [МОДЕРАТОР]
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Alex T., Попробовал Ваш вариант, просчет идет до 25 строки, столько же строк было в тестовом файле, к сожалению не нашел в макросе, что подправить, чтобы он прошел до конца.
Антон, Сам код не понял если честно как применить отдельно, так как приложенный Вами тестовый файл ругается, что браузер нужен старее чем у меня установлен. Поэтому протестировать не смог. В любом случае Ваше внимание к моей проблеме,  Вы  все мне помогли, огромное Вам всем спасибо.
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Цитата
New написал: ...раз больше никто не предлагает вариантов, то я остановлюсь на ваших формулах.
Просто волшебство, спасибо большое, 0 ошибок, найдены все 294 дубля, время не запомнил на сообщении примерно 1,5 минуты. Быстрее как минимум в 2-2,5 раза моего предыдущего результата.

Цитата
Камиль Гусейнов написал: (одним словом 4 - 5 минут) определил все дубли (294 штуки).
Сегодня проверю и другие предложенные способы и обязательно напишу, я всем очень благодарен  за оказанную помощь!!!
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
New, ок спасибо.
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Спасибо.
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
New, в общем использовал для теста небольшой массив данных, 42 713 строк (427 222 заполненные ячейки) сначала протестировал формулами:
=СЧЁТЕСЛИМН(D:D;D4;E:E;E4;F:F;F4;G:G;G4) - 2 минуты;
= СЧЁТЕСЛИ(C:C;C4)  - чуть больше 1 минуты;
=I4=J4 меньше минуты  (одним словом 4 - 5 минут) определил все дубли (294 штуки). Во время работы процессор I7 3770 - нагрузка в основном 100%

На счет макроса, убрал лишние колонки массив данных получился  42 713 строк (но 341 757 заполненные ячейки) запустил 18:25, недожался окончания,  сам  принудительно остановил 18:59  - длительность 34 минуты. Нагрузка на процессор была от 15 до 26%. Большой массив на который уходит формулами до 2,5-3,5 часов, думаю при таком предварительном сравнении, затянется как минимум в 3-4 раза дольше.
Я в любом случае протестирую  работу макроса до конца напишу за сколько он по времени завершил  и отличались ли результаты.

А вообще, его можно как то ускорить?  И если возможно, смогли бы также подправить диапазон, чтобы не удалять лишние столбцы таблицы.

ячейка В (или 2) - Идентификатор физ/лица  (вместо С (или 3) как раньше)
ячейки  F,G,H,I (или 6,7,8,9) - Фамилия, Имя, Отчество, Рождение. (вместо D,E,F,G или 4,5,6,7)
копируем на новый лист - диапазон  от А по J (или 1 по 10).
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
New, все четко работает на тестовом примере, огромное Вам спасибо. Проверю на большом массиве данных, обязательно отпишусь.
Макрос для поиска текста по заданному диапазону с подсветкой несоответствующей ячейки (критерию)
 
msi2102, еще раз огромное Вам  спасибо за помощь.  
Найти в таблице дубли данных физических лиц и копировать их на новый лист
 
Часто в работе приходится использовать поочередно 3 формулы для поиска значений или определенной информации, после выполнения одной процедуры длящейся часами прописывать вторую дожидаться ее окончания, и сравнить между собой
полученные результаты.
На практике это выглядит так:
1) =СЧЁТЕСЛИМН(D:D;D4;E:E;E4;F:F;F4;G:G;G4)
(где D– фамилия, Е – Имя, F – отчество, G-дата рождения);
2) = СЧЁТЕСЛИ(C:C;C4)  ( где С –  физ. лицо. идентификатор)
3) =I4=J4 (где I - результаты первой формулы, J – результаты второй формулы) отображаются как ЛОЖЬ или ИСТИНА.

Можете помочь с макросом, который будет выполнять алгоритм, завершив первую процедуру,
самостоятельно приступить ко второй, потом к третьей? И в завершении скопировать все данные со значениями ЛОЖЬ на отдельный лист.
Макрос для поиска текста по заданному диапазону с подсветкой несоответствующей ячейки (критерию)
 
msi2102, огромное спасибо  на тестовом файле работает, идеально! :)  
Макрос для поиска текста по заданному диапазону с подсветкой несоответствующей ячейки (критерию)
 
Друзья помогите с созданием макроса, который будет искать текст в массиве
данных по заданному текстовому диапазону, а в случае несоответствия одному из критериев
ячейка будет закрашиваться желтым цветом.

Желательно если есть возможность, сделать не чувствительный регистр (например, в массиве данных слово указанно как «УКАз», а в заданном диапазоне «Указ», чтобы макрос понимал, что это одно и тоже слово.
Макрос для поиска и подсветки ячеек в таблице из заданного диапазона (состоящего из нескольких составляющих)
 
Огромное Вам спасибо, работает идеально!!!  :)  
Макрос для поиска и подсветки ячеек в таблице из заданного диапазона (состоящего из нескольких составляющих)
 

Помогите с созданием макроса для поиска и подсветки ячеек в таблице, например, (жёлтым цветом), совпадающих с заданным диапазоном данных (статья, часть или несколько частей).

Как исключить подсчет отдельных пустых ячеек (по критерию) из проверяемого диапазона
 
Все сам немного переделал формулу, 3 этапами решаю данный вопрос:

1. Этап через СЧЁТЕСЛИМН посчитываю количество раз (повторяется Ф.И.О.) оставляю 2 и более раз.
2. Этап Формула =ЕСЛИ(СЧЁТЕСЛИМН($C$3:C3;C4;$D$3:D3;D4;$E$3:E3;E4;$F$3:F3;F4;$G$3:G3;G4;$B$3:B3;"<"&A4);"Повторность";"")
3. Этап в ручную лишнее стираю.

В принципе тему теперь можно закрыть.  
Как исключить подсчет отдельных пустых ячеек (по критерию) из проверяемого диапазона
 

Ранее мне помогли тут с формулой, которая определяет количество пустых ячеек, формула выглядит так:

=ЕСЛИ(B4="";0;ТЕКСТ(СЧЁТЕСЛИМН($C$3:C3;C4;$D$3:D3;D4;$E$3:E3;E4;$F$3:F3;F4;$G$3:G3;G4;$B$3:B3;"<"&A4);"1;;;"))

Но при работе с большим массивом данных выявлен следующий недостаток которой если с технической возможности Excel можно решить, хотелось бы устранить:

1. Формула сравнивает ячейки диапазона (А) со всеми пустыми ячейками (B) по одному и тому же человеку и присваивает им значение 0. Однако указанная формула также поступает и с ячейками (А) где (дата) значительно позже (даты) ячейки (B).

Описать вопрос тяжело, я приобщил файл, в котором показана работа формулы в деле и напротив планируемый (ожидаемый) результат. Очень на деюсь на Вашу помощь.  

Авторасчет расстояния между двумя пунктами
 
Я не эксперт, но если правильно понял вопрос, тогда

В ячейке С1 делаешь знак =
=А1+В1
=А1-В1
=А1/В1
=А1*В1  
потом выделяешь ячейку А1 и выбирай что нужно (сложить, вычесть, умножить, делить) от ячейки В1, в итоге получишь в С1 результат.
Определить количество пустых и заполненных датами ячеек по одному человеку
 
Проверил работу формулы на большом массиве данных, в результате выявлен следующий недочет:

1. Формула сравнивает ячейки диапазона (А) со  всеми пустыми ячейками (B)  и присваивает им значение 0, даже тем, где (дата) в ячейке (А) позже (даты) ячейки (B)
не как не получается сделать так, чтобы такие ячейки столбца(А) отображались в виде 1.
В приобщенном тестовом  файле, я все описал подробнее работу формулы на против каждой строки, реальный результат и ожидаемый.  

Код
=ЕСЛИ(B4="";0;ТЕКСТ(СЧЁТЕСЛИМН($C$3:C3;C4;$D$3:D3;D4;$E$3:E3;E4;$F$3:F3;F4;$G$3:G3;G4;$B$3:B3;"<"&A4);"1;;;"))
Изменено: Камиль Гусейнов - 06.01.2021 14:37:26 (Упростил, понимание заданного вопроса)
Определить количество пустых и заполненных датами ячеек по одному человеку
 
Огромное спасибо Вам обоим, в данном примере все работает идеально!  
Определить количество пустых и заполненных датами ячеек по одному человеку
 
БМВ, спасибо, вроде прописал формулу правильно, также копировал с форума, не сработала, скриншоты приобщаю.
Скрытый текст
Определить количество пустых и заполненных датами ячеек по одному человеку
 
Благодарю Вас за активную помощь, постарался максимально прокоментировать в таблице, что и как должно подсчитыватся, подсветил ячейки и т.д.  
Определить количество пустых и заполненных датами ячеек по одному человеку
 
Михаил огромное спасибо за ответ, но данная комбинация  решает вопрос только поиска пустых ячеек в колонке "вступило в силу". А ячейку (А8 ) в которой дата 25.03.2020 внесенная после данных в ячейке ( В7) 23.03.2020 не видет.  
Определить количество пустых и заполненных датами ячеек по одному человеку
 
Очень трудно сформировать вопрос но проблема заключается в следующем, нужно в большом массиве даных найти людей которые неоднократно привлекались к адм.ответственности (счетслимн) выполняет данную функцию идеально. Далее подсчитать  сколько в отношении указанных людей не вступило постановлений тоесть пустые ячейки, и если имеется отметка, что вступило, подсчитать все протокола по данному человеку составленные после постановления.
Страницы: 1
Наверх