0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 4
|
|
Поиск в двух столбцах01.06.2014, 14:58. Показов 3749. Ответов 7
Метки нет Все метки)
(
Добрый день.
Задача такая: есть столбец А с номерами (условно) машин на странице Sheet1. Есть столбец B с такими же данными на странице Sheet2. Нужно найти для каждого номера из столбца А соответсвие в столбце В на странице Sheet2, определить строку в столбце В, и сделать с данными из других столбцов в этой строке некоторые действия. В принципе, в столбце В может быть несколько номеров, повторяющих номер из столбца А. А можем не быть ни одного. Я это делаю двумя вложенными циклами. Верхний проходит по строкам столбца А, вложенный для каждой cells из А проверяет весь столбец В. В общем-то, все работает, но я предполагаю, что это же можно сделать с меньшими затратами машинного времени. Или я ошибаюсь?
0
|
01.06.2014, 14:58 | |
Ответы с готовыми решениями:
7
Поиск одинаковых чисел в двух столбцах Поиск .Find по двум полям в двух столбцах Поиск схожих значений в двух столбцах и перенос из первого на другой лист |
6995 / 2893 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
|
|
01.06.2014, 16:18 | |
Можно.
Данные из A в массив, его циклом в словарь. Данные из B в массив, его циклом сверяем с словарём - если есть в словаре, то действуем в строке. Будет значительно быстрее - и чем больше данных, тем больше будет разница скорости обработки.
0
|
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 4
|
|
08.06.2014, 15:50 [ТС] | |
Очень интересный пример, спасибо.
Подскажите, а как можно изменить код, если на Sheet2 в столбце А будут совпадающие значения? То есть будут 2 раза встречаться а2 с разными цифрами, и нужно эти цифры на Sheet3 просуммировать? Я так полагаю, что если встречаются повторящиеся значения в первом столбце на странице2, то a(i, 3) = b(.Item(a(i, 1)), 2) работать как положено не будет?
0
|
6995 / 2893 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
|
||||||
08.06.2014, 16:24 | ||||||
В примере в файле сперва в словаре запоминается номер строки (массива) уникальных значений второго листа, затем при цикле по массиву первого листа эти значения подтягиваются. Но т.к. запоминается только один номер - то суммирование там не получится. Но зато из этой строки можно подтянуть хоть 1000 значений.
Если нужно суммировать одну позицию - можно сразу сумму собирать в словаре, затем из словаря и подставлять:
Если нужно - попробуйте самостоятельно, в этих двух примерах всё необходимое кажется есть.
1
|
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 4
|
||||||
09.06.2014, 12:22 [ТС] | ||||||
Я тут посидел на выходных, поразмышлял, и так и не придумал, как можно применить словарь к своей задаче.
Алгоритм у меня в конкретной задаче такой: 1. Берется страница Sheet(1401_1402) с данными, загоняется полностью в массив а() (14 столбцов) 2. Берем массив b(), и перегоняем циклом данные из 2-х нужных столбцов в этот массив, при это обрабатывая данные из одного из столбцов (в столбце идентификаторы, у каких-то мы отрезаем лишние цифры (P.26004.09.658.11 -> P.26004), у каких-то отрезаем первые четыре символа. 3. В третий массив с() перегоняем вложенным циклом эти два столбца из массива b(), но уже суммируя строки с одинаковыми идентификаторами (были, скажем, 2 разных идентификатора P.26004.09.658.11 и P.26004.12.758.51, а стал один P.26004). 4. Потом уже берем данным из соответствующего столбца страницы Sheet(CER), сравниваем вложенным циклом каждый идентификатор из этого столбца [они тут уже приведенные к тому виду, который был получен при переводе b()->c()] с идентификаторами в массиве c(), и прописываем идентификатору соответствующую сумму. Иногда на изначальной странице идентификаторы разбросаны по нескольким столбцам, и приходится при перегоне из массива а() в массив b() делать что-то вроде if a(i,10)<>Empty then ... else if a(i,11)<> empty then ... ну и т.д. Можно упростить решение такой задачи с помощью словарей? Код выглядит так: Кликните здесь для просмотра всего текста
З.Ы. Во вложении файл с примером, если нужно.
0
|
6995 / 2893 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
|
||||||
09.06.2014, 13:28 | ||||||
Не понял зачем там третий лист - из описания не понятно, а в код не вникал, больно много всего...
Исходя из описания простой алгоритм на словаре такой: 1. Данные из CER_status в массив, его перебором в словарь - запоминаем позицию каждого уникального (строку). Т.е. ключ=1CR181100102, Item=3. 2. Создаём пустой массив для результата (аналогичный по высоте). 3. Данные двух столбцов листа 1401_1402 в два массива. 4. Цикл по массиву из 14-го столбца, получаем из данных ключ словаря (Вашим хитрым алгоритмом), проверяем его наличие в словаре - если есть, то из словаря берём номер строки массива, в нём собираем сумму (к тому что там есть прибавляем значение массива из 8-го столбца). 5. выгружаем собранное. Если нужно добавить к тому, что уже есть на листе - то массив не создаём, а берём с листа с тем, что там уже есть. Добавлено через 20 минут Вот например так (но в примере совпадений нет - я создал искусственно):
0
|
09.06.2014, 13:28 | ||||||
Помогаю со студенческими работами здесь
8
Проверка совпадений в двух столбцах
Удаление совпадающих записей в двух столбцах Макрос для сравнения данных в двух столбцах, вместо vlookup
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
|
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
|
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
|
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
|
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
|
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
|
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
|
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
|
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations
рестрикции доступа на сервер sshd
статья:
https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
подробные расшифровки по. . .
|
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
|