Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Цикличный поиск по столбцам - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цикличный поиск по столбцам (Макросы/Sub)
Цикличный поиск по столбцам
Berias Дата: Воскресенье, 25.12.2022, 15:48 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

2016
Господа! Моих скромных познаний VBA не хватает для решения проблемы, прошу помощи. В приложенном файле есть два листа, в каждом примерно по два десятка строк. Мне необходимо найти каждую из строк на первом листе в списке второго. Задача усложняется тем, что единственное хоть сколько-нибудь уникальное значение - это индекс в первом столбце, но даже он прекрасно себе повторяется по многу раз на обоих листах, так как строк на самом деле огромное множество множество, по нескольку тысяч. Единственный способ, хотя даже он будет не 100%-ый, но к сожалению больше ничего действительно придумать нельзя:

- макрос должен брать первые строки с одинаковым индексом, в нашем случае это первые две с индексом "1000031DBU1500002" и посмотреть есть ли у первой позиции с этим индексом уникальное значение во втором столбце("Завод" в нашем случае), то есть которое не повторялось бы среди других строк этого индекса. Если нет, перейти смотреть на следующий столбец, а если есть, то уйти на второй лист, найти там этот же индекс, столбец, и посмотреть будет ли это значение уникальным для одной из строк этого индекса. Если да, поставить отметочку в конце таблицы на 1 листе напротив этой позиции, вроде "найден в строке 10, через столбец 8" и закончить с этой позицией с листа 1. Если нет, опять же на 1 листе переходим к следующему столбцу. Так сделать со всеми строками этого индекса на листе 1, и после этого приняться за следующий индекс. Столбцы на листах имеют разный порядок, каких-то столбцов может не быть или у них могут слегка изменяться название, так как период между закручиванием отчетов - год, прошу не обращать на это внимание, хотелось бы сравнить столбцы именно столбцы с совпадающим названием.

Пример: для значения "1000596DBU1600007" Состзапаса листа 1 у нас есть 6 строк, и мы просматриваем их столбцы, и первое уникальное значение поджидает нас в столбце4-УчстОтгрКд, у одной строки значение "TU31", мы ищем этот столбец на листе 2, находим его 41, и узнаем что тут нет этого значения (либо оно могло быть не уникально на данном листе), значит идем по столбцам на листе 1 дальше., история повторяется для всех столбцов до 8-ОсновСчет и тут нас ждет успех - уникальное значение одной из строк "1006010000" имеет уникальное значение и на листе 2 в одноименном столбце 21. Бинго, мы возвращаемся на 1 лист, и в конце таблицы ставим напротив этой строки пометочку, для нее все закончено, но для остальных строк значения "1000596DBU1600007" Состзапаса листа 1 только начинается! Они идут искать свои уникальные значения, если они есть, до конца. Если таковых нет - ситуация безнадежная, можно так и написать в конце таблицы этой строки...
С другой стороны, я хотел просить чтобы программа после нахождения одного совпадения бежала дальше и нашла еще одно, так было бы меньше результатов но каждый был бы точен на 99,99%. И в последнем столбце писала нашла ли она одно или два совпадения и в каких столбцах. Но такое неловко просить, мне кажется это за гранью.

На моем уровне самых простых операторов я не могу с этим справится, помогите!
К сообщению приложен файл: 0782855.xlsx (40.4 Kb)
 
Ответить
СообщениеГоспода! Моих скромных познаний VBA не хватает для решения проблемы, прошу помощи. В приложенном файле есть два листа, в каждом примерно по два десятка строк. Мне необходимо найти каждую из строк на первом листе в списке второго. Задача усложняется тем, что единственное хоть сколько-нибудь уникальное значение - это индекс в первом столбце, но даже он прекрасно себе повторяется по многу раз на обоих листах, так как строк на самом деле огромное множество множество, по нескольку тысяч. Единственный способ, хотя даже он будет не 100%-ый, но к сожалению больше ничего действительно придумать нельзя:

- макрос должен брать первые строки с одинаковым индексом, в нашем случае это первые две с индексом "1000031DBU1500002" и посмотреть есть ли у первой позиции с этим индексом уникальное значение во втором столбце("Завод" в нашем случае), то есть которое не повторялось бы среди других строк этого индекса. Если нет, перейти смотреть на следующий столбец, а если есть, то уйти на второй лист, найти там этот же индекс, столбец, и посмотреть будет ли это значение уникальным для одной из строк этого индекса. Если да, поставить отметочку в конце таблицы на 1 листе напротив этой позиции, вроде "найден в строке 10, через столбец 8" и закончить с этой позицией с листа 1. Если нет, опять же на 1 листе переходим к следующему столбцу. Так сделать со всеми строками этого индекса на листе 1, и после этого приняться за следующий индекс. Столбцы на листах имеют разный порядок, каких-то столбцов может не быть или у них могут слегка изменяться название, так как период между закручиванием отчетов - год, прошу не обращать на это внимание, хотелось бы сравнить столбцы именно столбцы с совпадающим названием.

Пример: для значения "1000596DBU1600007" Состзапаса листа 1 у нас есть 6 строк, и мы просматриваем их столбцы, и первое уникальное значение поджидает нас в столбце4-УчстОтгрКд, у одной строки значение "TU31", мы ищем этот столбец на листе 2, находим его 41, и узнаем что тут нет этого значения (либо оно могло быть не уникально на данном листе), значит идем по столбцам на листе 1 дальше., история повторяется для всех столбцов до 8-ОсновСчет и тут нас ждет успех - уникальное значение одной из строк "1006010000" имеет уникальное значение и на листе 2 в одноименном столбце 21. Бинго, мы возвращаемся на 1 лист, и в конце таблицы ставим напротив этой строки пометочку, для нее все закончено, но для остальных строк значения "1000596DBU1600007" Состзапаса листа 1 только начинается! Они идут искать свои уникальные значения, если они есть, до конца. Если таковых нет - ситуация безнадежная, можно так и написать в конце таблицы этой строки...
С другой стороны, я хотел просить чтобы программа после нахождения одного совпадения бежала дальше и нашла еще одно, так было бы меньше результатов но каждый был бы точен на 99,99%. И в последнем столбце писала нашла ли она одно или два совпадения и в каких столбцах. Но такое неловко просить, мне кажется это за гранью.

На моем уровне самых простых операторов я не могу с этим справится, помогите!

Автор - Berias
Дата добавления - 25.12.2022 в 15:48
Gustav Дата: Воскресенье, 25.12.2022, 17:05 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2739
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Это, небось, из SAP'а выгрузка? Судя по 4-хсимвольным кодам Завода и Склада... Чего абаперы не помогут дополнить выгрузку теми данными, которые Вы в Excel собираетесь выуживать?

для значения "1000596DBU1600007" Состзапаса листа 1 у нас есть 6 строк

Где их шесть? Я вижу 3 и 3:

1000596DBU1600007
1000596DBU1600007
1000596DBU1600007
1000596DBU2100007
1000596DBU2100007
1000596DBU2100007

И до какого столбца вправо на Листе1 надо искать уникальность? До восьмого? Или до самого последнего (155)?! Там уже во многих столбцах и данных-то нет...


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 25.12.2022, 17:44
 
Ответить
СообщениеЭто, небось, из SAP'а выгрузка? Судя по 4-хсимвольным кодам Завода и Склада... Чего абаперы не помогут дополнить выгрузку теми данными, которые Вы в Excel собираетесь выуживать?

для значения "1000596DBU1600007" Состзапаса листа 1 у нас есть 6 строк

Где их шесть? Я вижу 3 и 3:

1000596DBU1600007
1000596DBU1600007
1000596DBU1600007
1000596DBU2100007
1000596DBU2100007
1000596DBU2100007

И до какого столбца вправо на Листе1 надо искать уникальность? До восьмого? Или до самого последнего (155)?! Там уже во многих столбцах и данных-то нет...

Автор - Gustav
Дата добавления - 25.12.2022 в 17:05
Berias Дата: Воскресенье, 25.12.2022, 18:10 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

2016
Gustav, Да, это у нас SAP. Кто такие Абаперы?)
Ой, их действительно три, это я слепой, прошу прощения.
Искать хотелось бы до столбца "Количество", он первый с белым цветом и вроде как с не повторяющимся названием.
А тут видите в чем дело, цель макроса не выудить данные, а найти строку с листа 1 на листе 2. Два этих листа - выгрузки соответственно за начало и за конец года. Причем не друг за другом они выгружались, а именно год назад выгружался первый лист, именно из за этого у некоторых вроде бы идентичных столбцов разные названия а некоторые вообще появились из ниоткуда, типа исправили за год и добавили новое) Но на это не обращайте внимание, шапку я поправлю перед запуском макроса если будет необходимость. И суть в том, что за год каждой строки могли измениться почти ЛЮБЫЕ столбцы. Да какое там почти, все столбцы кроме двух легко могут изменить свое значение для отдельно взятой строки, но наш первый столбец - есть сцепка этих двух железных. Кроме них все зыбко. И это то что мне предстоит сделать: искать строки в которых хоть что-то осталось прежним, и пристальнее их разглядывать. То есть такой макрос не сделал бы всю работу к сожалению, но ускорил бы ее в разы, уже найдя строки с уникальными соответствиями.


Сообщение отредактировал Berias - Воскресенье, 25.12.2022, 18:15
 
Ответить
СообщениеGustav, Да, это у нас SAP. Кто такие Абаперы?)
Ой, их действительно три, это я слепой, прошу прощения.
Искать хотелось бы до столбца "Количество", он первый с белым цветом и вроде как с не повторяющимся названием.
А тут видите в чем дело, цель макроса не выудить данные, а найти строку с листа 1 на листе 2. Два этих листа - выгрузки соответственно за начало и за конец года. Причем не друг за другом они выгружались, а именно год назад выгружался первый лист, именно из за этого у некоторых вроде бы идентичных столбцов разные названия а некоторые вообще появились из ниоткуда, типа исправили за год и добавили новое) Но на это не обращайте внимание, шапку я поправлю перед запуском макроса если будет необходимость. И суть в том, что за год каждой строки могли измениться почти ЛЮБЫЕ столбцы. Да какое там почти, все столбцы кроме двух легко могут изменить свое значение для отдельно взятой строки, но наш первый столбец - есть сцепка этих двух железных. Кроме них все зыбко. И это то что мне предстоит сделать: искать строки в которых хоть что-то осталось прежним, и пристальнее их разглядывать. То есть такой макрос не сделал бы всю работу к сожалению, но ускорил бы ее в разы, уже найдя строки с уникальными соответствиями.

Автор - Berias
Дата добавления - 25.12.2022 в 18:10
Gustav Дата: Воскресенье, 25.12.2022, 21:39 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2739
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Кто такие Абаперы?

Абаперы - это программисты на языке ABAP (абап). Это язык программирования внутри системы SAP. В состав группы поддержки SAP на предприятии ("на клиенте") обычно входят несколько таких программистов - для написания всяких специфических отчетов, выгрузок/загрузок и не только. В общем, как программисты 1C обслуживают свою корпоративную 1С-ку, так и абаперы обслуживают свой SAP (свою клиентскую инсталляцию).

Berias, задачка непростая. Наскоком за 15 минут не решается, даже в мыслях. Я вижу работы часов на 10, не меньше, а то и на 20. Поэтому смотрите сами - может, если у Вас есть возможность инвестиций, отправить тему в платный раздел? Я лично не возьмусь даже за деньги - увы, не располагаю в ближайшем будущем таким свободным временем.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 25.12.2022, 21:56
 
Ответить
Сообщение
Кто такие Абаперы?

Абаперы - это программисты на языке ABAP (абап). Это язык программирования внутри системы SAP. В состав группы поддержки SAP на предприятии ("на клиенте") обычно входят несколько таких программистов - для написания всяких специфических отчетов, выгрузок/загрузок и не только. В общем, как программисты 1C обслуживают свою корпоративную 1С-ку, так и абаперы обслуживают свой SAP (свою клиентскую инсталляцию).

Berias, задачка непростая. Наскоком за 15 минут не решается, даже в мыслях. Я вижу работы часов на 10, не меньше, а то и на 20. Поэтому смотрите сами - может, если у Вас есть возможность инвестиций, отправить тему в платный раздел? Я лично не возьмусь даже за деньги - увы, не располагаю в ближайшем будущем таким свободным временем.

Автор - Gustav
Дата добавления - 25.12.2022 в 21:39
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цикличный поиск по столбцам (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!