Новости:

Из правил форума: Тема должна отражать суть вопроса, топики типа "help please" будут удаляться!

Главное меню

Сравнение таблиц и выборка данных

Автор Michael Holbrook, 13.04.2014, 22:24

« назад - далее »

Michael Holbrook

Всем привет! Прошу о помощи.

Имеются две таблицы с одинаковой базой данных, но в разном виде! Необходимо опираясь на артикул в одном файле - искать такую же позицию в другом и выводить в нужную ячейку количество.
Минус состоит в том, что главная таблица, из которой изымаются данные постоянно меняется. Какая-то номенклатура меняется, какая-то добавляется, какая-то удаляется. Т.е. ячейки могут перемещаться и менять свой адрес.

Файл "Выборка данных1" - главный, откуда данные изымаются.


iron priest


gling

Цитироватьчитвйте про ВПР
или СУММЕСЛИ так как в выборке данных2 есть повторяющиеся номенклатуры.
mail: vovik100661@gmail.com;
ЯД-41001506838083.

Michael Holbrook

#3
Спасибо, ребят! В течение дня буду разбираться.

Еще вопрос. Так как "Выборка данных1" - главный файл и там происходят изменения в виде удаления и добавления номенклатуры, можно ли как-то автоматически производить зеркальную операцию и в файле "Выборка данных2"? Я так полагаю, что удаление строк с одинаковой номенклатурой еще как-то можно реализовать, но вот добавление... Мне же надо добавлять соответствующую номенклатуру в конкретное место...(в конкретную группу и производителя)

Michael Holbrook

С ВПР разобрался, спасибо за помощь!

Остался только этот вопрос:

Так как "Выборка данных1" - главный файл и там происходят изменения в виде удаления и добавления номенклатуры, можно ли как-то автоматически производить зеркальную операцию и в файле "Выборка данных2"? Я так полагаю, что удаление строк с одинаковой номенклатурой еще как-то можно реализовать, но вот добавление... Мне же надо добавлять соответствующую номенклатуру в конкретное место...(в конкретную группу и производителя)

З.Ы. Просто не представляю сам, что это должен быть за макрос, который даже несмотря на одинаковое наполнение, но зато с разной структурой будет проводить автоматическое удаление и добавление строки в конкретное место.

GWolf

Цитата: Michael Holbrook от 15.04.2014, 15:21
... Просто не представляю сам, что это должен быть за макрос,
да не очень сложный макрос!
Цитироватькоторый даже несмотря на одинаковое наполнение, но зато с разной структурой
да макросу, вообщем то все равно, какова структура и наполнение, он ведь просто построчно передает интерпретатору инструкции написанные Вами! Так что отвлекитесь от стереотипа!
Цитироватьбудет проводить автоматическое удаление и добавление строки в конкретное место.
ну конечно будет, если Вы его этому "научите".
Путей к вершине - множество. Этот один из многих!

GWolf

Еще раз прочел Ваш пост и решил немного уточнить (локализовать) вопрос:
Цитата: Michael Holbrook от 15.04.2014, 15:21
... Так как "Выборка данных1" - главный файл и там происходят изменения в виде удаления и добавления номенклатуры, можно ли как-то автоматически производить зеркальную операцию и в файле "Выборка данных2"?
вот смотрите, что значит "зеркально"? В VBA возможна реализация отклика на действия пользователя как минимум двумя способами: способ первый заключается в отклике книги; листа; ячейки и т.п. на событие. Событием может выступить изменение содержимого ячейки, как вообще, так и определенного типа или значения. Способ второй - это запуск пользователем определенной макропрограммы. Макропрограмму можно "прицепить" к кнопке или графическому объекту, созданному на листе, например. Выбор способа остается за пользователем, т.е. за Вами.
ЦитироватьЯ так полагаю, что удаление строк с одинаковой номенклатурой еще как-то можно реализовать, но вот добавление... Мне же надо добавлять соответствующую номенклатуру в конкретное место...(в конкретную группу и производителя...
ну так и что тут сложного? Опять развитие сюжета предполагает как минимум два варианта: вариант первый: в артикул "зашит" и производитель и группа. В таком случае в переменную заносим артикул (например он записан в столбец "В")
dim nomArt as string
dim nR as long

nR=ActiveCell.Row
nomArt=""
nomArt= cells(nR,2).text '- переменой nomArt присваиваем значение ячейки, расположенной в активной строке (строке в которой, на момент запуска макроса, находится курсор и, во втором столбце (этакая микрозащита "от дурака". Можно было бы сразу установить курсор в столбец "В" и тогда, вместо значения 2, следовало бы указать nC, а перед тем nC присвоить значение: nC = ActiveCell.Column, но вдруг пользователь не установит курсор во второй столбец? Ну или перед присвоением значения, конструкцией If ... Else ... End If, проверять где стоит курсор! Потому что макрос как-то ведь должен спозиционироваться!).

Ну и затем в цикле Do ... Loop ищем этой переменной - nomArt, соответствие во втором списке.
Второй вариант, предполагает присвоение трем различным переменным, соответственно значения из списка А, наименования группы; наименования производителя и номера артикула. И затем поиск в списке Б группы производителя артикула и его удаление. Или, если требуется вставка, то найдя группу и производителя ищем более старший номер артикула в группе-производителе и вставляем выше пустую строку, в которую пишем наш артикул и все что нужно к нему в соседние ячейки по вставленной строке.
Путей к вершине - множество. Этот один из многих!

Michael Holbrook

#7
Смотрите, еще раз для уточнения хочу описать смысл всего и как это будет происходить.

На предприятии хранится база данных 1С со всей номенклатурой. Моя задача - изъять список всей номенклатуры с артикулами и количеством в свой экселевский файлик, в котором я бы всю номенклатуру мог рассортировать по типам и производителям. В итоге у меня есть экспортированная с 1С база данных в экселевском формате - файл "Инвентаризационная" и есть экселевский файл "База данных с группами123456" с подгруппами и производителями.

Предположим, что я вручную перенес всю номенклатуру из первого файла во второй, разложил по нужным группам. Но, номенклатура же периодически добавляется и удаляется. Поэтому хотелось бы, чтобы файл "База данных с группами123456" отслеживал новые позиции в файле "Инвентаризационная" и автоматически (к примеру - при открытии файла) добавлял в "База данных с группами123456" в нужной группе и производителе строку и вставлял туда данные.

С автоматическим удалением я разобрался сам. Добавил макрос "удаление строк по условию", это меня устраивает. Т.е. поиск позиций происходит по функции ВПР. Если не находит - выдается ошибка. Если ошибка - удаление строки.

Еще раз прикрепляю файлы в архиве.

GWolf

Цитата: Michael Holbrook от 20.04.2014, 15:01
... Поэтому хотелось бы, чтобы файл "База данных с группами123456" отслеживал новые позиции в файле "Инвентаризационная" и автоматически (к примеру - при открытии файла) добавлял в "База данных с группами123456" в нужной группе и производителе строку и вставлял туда данные.
Это возможно, только в случае если программа сможет ПОНИМАТЬ в какую группу, подгруппу и какому производителю принадлежат данные из "Инвентаризационная"!
Я посмотрел, у Вас артикулы не являются определяющим ключом для отнесения информации к группе, подгруппе, производителю. Потому что в одной и той же группе присутствуют артикулы с различным, безсистемным, значением.

ЦитироватьС автоматическим удалением я разобрался сам. Добавил макрос "удаление строк по условию", это меня устраивает. Т.е. поиск позиций происходит по функции ВПР. Если не находит - выдается ошибка. Если ошибка - удаление строки.

Еще раз прикрепляю файлы в архиве.
То что Вы делаете с ВПР, на VBA возможно сделать и без ВПР. Ну это так, к слову.
Путей к вершине - множество. Этот один из многих!

Michael Holbrook

Цитата: GWolf от 20.04.2014, 20:00
Цитата: Michael Holbrook от 20.04.2014, 15:01
... Поэтому хотелось бы, чтобы файл "База данных с группами123456" отслеживал новые позиции в файле "Инвентаризационная" и автоматически (к примеру - при открытии файла) добавлял в "База данных с группами123456" в нужной группе и производителе строку и вставлял туда данные.

Это возможно, только в случае если программа сможет ПОНИМАТЬ в какую группу, подгруппу и какому производителю принадлежат данные из "Инвентаризационная"!
Я посмотрел, у Вас артикулы не являются определяющим ключом для отнесения информации к группе, подгруппе, производителю. Потому что в одной и той же группе присутствуют артикулы с различным, безсистемным, значением.
Да, именно так. Артикулы создаются в 1С автоматом при добавлении новой номенклатуры и никакой больше информации не несут)

Цитировать
То что Вы делаете с ВПР, на VBA возможно сделать и без ВПР. Ну это так, к слову.
Да, это я понимаю.

GWolf

Цитата: Michael Holbrook от 20.04.2014, 21:29
... Артикулы создаются в 1С автоматом при добавлении новой номенклатуры и никакой больше информации не несут
Дело не в артикулах!
Ответьте себе на вопрос: - Как программа определит в какую группу, подгруппу записать вновь появившуюся позицию?
Путей к вершине - множество. Этот один из многих!

Michael Holbrook

Да, я понимаю - о чем Вы. Допустим, что мы в 1С создадим еще одну колонку с официальным артикулом производителя и тогда программа как минимум сможет определить - к какому производителю относить. А вот с группами и подгруппами - да, надо будет подумать. Спасибо, надеюсь, что отпишусь завтра снова в тему, уже определившись с этим вопросом.

Michael Holbrook

Еще раз привет!

Есть такой вариант. У меня в справочнике всем производителям и группам (подгруппам) будет присвоен свой уникальный код. Складовщик будет указывать эти коды всем позициям.

В данном случае в колонке "I" есть код "00001". Пусть это к примеру будет производитель "Siemens" и "00002" - производитель "Eaton".
В колонке M пишутся коды групп или подгрупп.
Код "11" - это подгруппа 1.1. Автоматические выключатели
Код "22" - это подгруппа 2.1. Автоматы защиты двигателей

Упрощается ли теперь задача? Ведь теперь указатели есть?!

В архив залил лишь файл "Инвентаризационная" для наглядности. Второй файл остался тем же.






GWolf

Цитата: Michael Holbrook от 23.04.2014, 10:22
...
Упрощается ли теперь задача? Ведь теперь указатели есть?!
...
Полагаю, что задача усложнилась: Вы так и не написали ни строчки кода!
Путей к вершине - множество. Этот один из многих!