Страницы: 1 2 След.
RSS
Отметить адрес если на него приходятся разные имена
 
Добрый день.
Есть файл в котором 2 столбца
А - ИМЯ КОНТРАГЕНТА
B - АДРЕС
Скрытый текст

Если на адресе несколько имён как тут. поставить что нибудь в столбец С или залить ячейки B с адресом. Т.е. ЕСЛИ НА ОДИН АДРЕС ПРИХОДИТСЯ РАЗНЫЕ ИМЕНА ПОМЕЧАЕМ ЕГО МОЖНО ВАРИАНТ И НА PQ, или VBA не принципиально. Формулой думаю это будет жостко ) но интересно )
Один адрес может быть в списке как 1 раз так и 10, и не обязательно друг за другом.
Реальные файлы которые надо проверять содержат более 300000 строк

Подробнее в файле.( в файле выделил что должно пометиться)
 
Цитата
Wild.Godlike написал:
МОЖНО ВАРИАНТ И НА PQ, или VBA не принципиально
Я так понимаю вы разрешаете? А что у вас не получается покажите свои попытки , что то сделать в этом направлении.
"Все гениальное просто, а все простое гениально!!!"
 
Wild.Godlike, вот так на PQ кнопками за пару минут. Есть конечно куда улучшать
 
Nordheim, VBA не моё ( пробовал PQ и формулами, через ЕСЛИ, счетесли, просмотр, через как то сцепить данные, с доп столбцами, много гадостей, толку лить сюда вариантов, несколько файлов с моими четными попытками.
Dark1589,
Спасибо большое. :)
 
Wild.Godlike, у Вас в примере номера идут по возрастающей, а вот в ячейках B14:B25 какая-то каша. Это так и есть в данных или просто кривоватый пример?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Wild.Godlike, ещё через доп.столбец формулой

В D2
Код
=СЦЕПИТЬ(A2;B2)
В C2
Код
=ЕСЛИ(СЧЁТЕСЛИ($B$2:$B$317;B2)>СЧЁТЕСЛИ($D$2:$D$317;D2);"жопка";"")
 
Максим В., Добрый день.
В примере там рядом написанно
Цитата
Строки могут быть в перемешку как тут сначало 4 потом 6 4 5
В основном по возразстающей, но бывают такие вот исключения. не знаю по какой причине строки так в БД перемешиваются.
я по началу думал отсортировать фильтром А-Я то тогда получается что идёт 1 10 11 .... 2 20 21.....
 
Для большинства случаев поможет просто сравнение в Условном форматировании:
Код
=СЧЁТЕСЛИ($A$2:$A$317;$A2)=СЧЁТЕСЛИ($B$2:$B$317;$B2)
Для красоты потом можно (например лишними пробелами) устранить покраску адресов, по которым проживает один и тот же "человек"
 
Wild.Godlike, если допускается сортировка по столбцу В, то можно такой формулой массива:
=ЕСЛИ(И(A2=ИНДЕКС($A$1:$A$500;ПОИСКПОЗ(B2;$B$1:$B$500;0)):ИНДЕКС($A$1:$A$500;ПОИСКПОЗ(B2;$B$1:$B$500;0)+СЧЁТЕСЛИ($B$1:$B$500;B2)-1));"";"**опка")
И еще у Вас есть Пеймер НаталИя Михайловна и Пеймер НаталЬя Михайловна. Это тоже **опка
;)  
Изменено: Максим В. - 14.05.2019 14:33:42
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Dark1589, )прям 1 в 1 формулы совпали, когда посмотрел как у вас в PQ реализовано) так же сделал формулами понял куда копать) спасибо.
IKor, Спасибо :) посмотрим
Максим В., **опка поднимает настроение.  ;) Спасибо интересная формула, закинул в рабочий файл где почти пол милиона строк стало интересно нажал вычислить формулу, завис ПК :DDDD прешлось перезагружать и так 2 раза )))))
 
Пол миллиона строк это конечно круто. Попробуйте такой вариант без массивного ввода:
=ЕСЛИ(СУММПРОИЗВ(--(A2=ИНДЕКС($A$1:$A$500;ПОИСКПОЗ(B2;$B$1:$B$500;0)):ИНДЕКС($A$1:$A$500;ПОИСКПОЗ(B2;$B$1:$B$500;0)+СЧЁТЕСЛИ($B$1:$B$500;B2)-1)))<>СЧЁТЕСЛИ($B$1:$B$500;B2);"**опка";"")
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Максим В., Спасибо, работает. Прошлая тоже работает. причём даже довольно таки быстро.
Но что та что эта убивают напроч мой ПК если именно нажать во вкладке Формулы "вычислить формулу"))) видать слишком большой объем для визуализации именно порядка вычисления )
 
PQ
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Имя контрагента", type text}, {"АДРЕС(если макрос выделить любым цветом)", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"АДРЕС(если макрос выделить любым цветом)"},{{"",each _, type table},{"Количество",each List.Count(List.Distinct([#"Имя контрагента"]))}}),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Grouped Rows", "", {"Имя контрагента"}, {"Имя контрагента"}),
    #"Reordered Columns" = Table.ReorderColumns(#"Expanded {0}",{"Имя контрагента", "АДРЕС(если макрос выделить любым цветом)", "Количество"})
in
    #"Reordered Columns"
 
Андрей Лящук, спасибо за интересное решение
как можно объяснить следующее: при такой записи группируется каждая строка в строку(если я правильно определил)
Код
{"",each _, type table}

а при такой записи группируется как обычно, то есть как привык видеть. интересует почему первый вариант группирует по другому?
Код
{" ",each _, type table}
 при разворачивании - одинаковый результат
 
Проверьте вариант. Не знаю, сколько будет на 500 000 строк работать ))
 
Юрий М, Добрый день, Юрий. Ради интереса всё же провел тест.
Ryzer 5 3.2GHz
8gb ram
windows 10

505293 строки, 3ч висел, в итоге убил процесс.
250140 строк, выполнилось примерно за 1 час - 1час 10минут. пропустил момент )

Вариант от Dark1589,
505293 строки) - 15минут
250140 строк - 9минут (ожидал как минимум в 2 раза меньше),

Вариант от Андрей Лящук,
505293 строки) - 14минут
250140 строк - 9минут (ожидал как минимум в 2 раза меньше),

Вариант от Максим В.,
505293 строки) - Умер, пришлось ПК перезапустить :D 3 раза
250140 строк - ~1ч промохал момент чтобы точно )
Изменено: Wild.Godlike - 17.05.2019 09:25:18
 
Цитата
Wild.Godlike написал:
всё же провел тест
на все про все около шести часов :D
а с этим вариантом не пробовали?
Код
{" ",each _, type table}
 
artyrH, нет )  сейчас попробую ) отпишусь )

Эм.....не знаю с чем связано нооо.......меньше минуты О_О
Изменено: Wild.Godlike - 17.05.2019 10:00:02 (протестировал)
 
Вариант на словарях
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Wild.Godlike написал:
..меньше минуты
я не ослышался?) результаты сверяли?
охота услышать ответы на вопрос в  #14
 
Wild.Godlike, здравствуйте! Вариант через сортировку. На больших объёмах должен оторваться…
КОД
если удобно, то можете мне в личку скинуть реальный объём (ссылка на облако или файлообменник) - я сам потестирую…
Изменено: Jack Famous - 17.05.2019 12:17:57 (Исправил ложное срабатывание и добавил кнопку)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,
Я же правильно понимаю чтобы мне применить на весь мой диапазан, то вот тут:
это
Код
tm = Timer: arr = Worksheets("все").[a2:c317]

надо заменить на это
Код
tm = Timer: arr = Worksheets("все").[a2:c505293]



Nordheim, Спасибо :) Ваш вариант всё выполнил за ~2секунды.
Изменено: Wild.Godlike - 17.05.2019 13:00:45
 
Wild.Godlike, всё верно. Или вычислять его  ;)
Цитата
Wild.Godlike: Nordheim … выполнил за ~2секунды
только имейте ввиду, что (по моим тестам) после ~100к уникальных (в вашем случае - адресов) начнётся сильное замедление словарей
Изменено: Jack Famous - 17.05.2019 13:08:54
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,  :D Да вот я смотрю что уже 36 минут висит)
artyrH, Да результаты проверил, косяков нет)
Изменено: Wild.Godlike - 17.05.2019 13:37:34
 
Цитата
Wild.Godlike написал:
Nordheim , Спасибо  Ваш вариант всё выполнил за ~2секунды.
А результат правильный? 2 сек. на каком объеме?
Изменено: Nordheim - 17.05.2019 13:43:04
"Все гениальное просто, а все простое гениально!!!"
 
Wild.Godlike, мой вариант с сортировкой или словари от Nordheim?
Мой вариант может тупить, если у вас у большинства адресов первые 3 символа одинаковые (префикс) - особенность сортера… Если нет, то хотелось бы всё-таки исходники посмотреть
Изменено: Jack Famous - 17.05.2019 13:59:53
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, Ваш вариант с сортировкой. вот и итоге ошибку получил.(см. вложения). время работы около 1ч. Вариант с исходниками сложно. всё таки персоналка, выдрал для форурма 1 дом для тестов ).

Nordheim, 556161 строка(вложение 3) Да результат совершенно верный.
Изменено: Wild.Godlike - 17.05.2019 14:17:55
 
Получается , что на словарях самый быстрый результат? Учитывая что по массиву пришлось 2 раза пробегать циклом.
"Все гениальное просто, а все простое гениально!!!"
 
Wild.Godlike, если у вас структура, как в примере — 3 столбца и адреса во втором, то, видимо, сортер просто "зарылся" - при тесте на миллионе он тоже долго тупил… Можно вместо него рекурсивную функцию прикрутить, но раз вариант на словарях отNordheim стабильный и шустрый, то зачем))) я бы и сам также делал, просто хотел показать другой способ  :D

Как вариант, можно отсортировать в Excel по 2 столбцу и потом запустить мой макрос без сортера (удалить ": If Not Array2xSort_Text(arr, 2) Then MsgBox "Сортировка не выполнена", vbCritical, "ОШИБКА": Exit Sub")

Сортировать "Excel'ем" можно и в VBA: [a2:c505293].Sort key1:=[b2:b505293], order1:=xlAscending, Header:=xlNo
или лучше так: [a1:c505293].Sort Key1:=[b1], Order1:=xlAscending, Header:=xlYes, MatchCase:=True
Изменено: Jack Famous - 17.05.2019 14:34:09
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Nordheim, Именно так самое быстрое :)
Jack Famous, Да именно так 1 в 1 структура, вечером уже протестирую с вашим предложным вариантом ради интереса )
Страницы: 1 2 След.
Наверх