Страницы: 1
RSS
Создание списка товаров по артикулам, подскажите как можно создавать базу по товарам на получаемых артикулов
 

Добрый день.
Имеется база товаров (прикрепленный файл Образец, лист-База товаров)
В Указанной базе товаров содержится несколько тысяч товаров. Каждый товар содержит свое уникальное название (столбец D), свой уникальный Артикул (/Столбец B), и описание его Характеристик (столбец F). Причем описание характеристик (столбец F) может быть разного количества-от одной строки-до 100. К примеру товар Карандаш имеет 10 характеристик, а товар фломастер имеет всего 6 характеристик.

Указанная выше база имеет статический вид.

Далее смотрим лист База артикулов, эту базу получаем каждый день, она является статичной. В базе может быть, как 5 артикулов, так и 1000. Причем артикулы могут повторяться по 10 раз.

Задача состоит в том, чтобы на третьем листе собрать все товары из листа База товаров, исходя из требований листа База артикулов (как показано на листе конечный вариант).

Лучше макросом конечно же)

ПО-Excel 2016 64битный

 
tahan, добрый день! Нет примера того, что хотелось бы иметь на выходе ( п.2.3 ПРАВИЛ)
Если без подробностей, то:
1. все базы в "умных" таблицах
2. "подтягивать" значения по ключу через ИНДЕКС+ПОИСКПОЗ
3. строим сводную по самой информативной базе и фильтруем срезами
Изменено: Jack Famous - 03.04.2017 10:28:51
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
tahan , добрый день! Нет примера того, что хотелось бы иметь на выходе ( п.2.3  ПРАВИЛ )
Пример  в файле-см. лист-Конечный вариант

1-3 пункт. а по проще (развернуто) можно-а то не понятно)))
 
tahan, конечный вариант не отличается от базы товаров. № и артикулы на листе "артикулы" не соответствуют им же в лругих листах
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
tahan , конечный вариант не отличается от базы товаров. № и артикулы на листе "артикулы" не соответствуют им же в лругих листах
Проверил-все там соответствует-На столбец С внимания даже не обращайте, надо смотреть  Артикула и названия товаров. В конечном варианте собраны товары исходи из строгой последовательно листа База артикулов.  
 
я не вижу хоть какой-либо принципиальной разницы
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Макрос запускать при активном листе База артикулов
Код
Sub Articul()
Dim i As Long
Dim iLastRow As Long
Dim iLR As Long
Dim FoundArticul As Range
Dim Baza As Worksheet
Dim EndVar As Worksheet
Dim n As Integer
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
 Set Baza = ThisWorkbook.Worksheets("База товаров")
 Set EndVar = ThisWorkbook.Worksheets("Конечный вариант")
  For i = 3 To iLastRow
    Set FoundArticul = Baza.Columns(2).Find(Cells(i, 3), , xlValues, xlWhole)
    If Not FoundArticul Is Nothing Then
      n = 1
      Do    
          n = n + 1      
      Loop While Baza.Cells(FoundArticul.Row + n, 2) = Baza.Cells(FoundArticul.Row, 2)
       iLR = EndVar.Cells(Rows.Count, 2).End(xlUp).Row + 1
      Baza.Range(Baza.Cells(FoundArticul.Row, 2), Baza.Cells(FoundArticul.Row + n - 1, 6)).Copy _
      EndVar.Cells(iLR, 2)
    End If
  Next
End Sub
Номера в столбце А и С попробуйте проставить сами. Удачи!
Изменено: Kuzmich - 03.04.2017 11:53:14
 
Цитата
Jack Famous написал:
я не вижу хоть какой-либо принципиальной разницы
в Базе 5 товаров в следующем порядке:
Карандаш
Фломастер
Акварель
Пластилин
Ручка
в конечном варианте:
Карандаш
Фломастер
Акварель
Карандаш
Карандаш
Акварель
Пластилин
Пластилин
Акварель
Фломастер
Фломастер
Акварель
Пластилин
Разница во первых в количестве, во вторых в порядке
Изменено: tahan - 03.04.2017 11:52:47
 
И вот это я тоже не понял
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Kuzmich написал:
Макрос запускать при активном листе База артикулов
скачиваю файл который закрепил, и тестирую на нем. активирую лист База артикулов
Выдает сразу ошибку
(эксель 2016)
Изменено: tahan - 03.04.2017 12:49:46
 
Цитата
Jack Famous написал:
И вот это я тоже не понял
Общая нумерация и другие номера не имеют никакого значения. Они там указаны для удобства навигации. Главное Номера артикулов, название товара, и характеристики товара
Изменено: tahan - 03.04.2017 12:40:09
 
Цитата
tahan написал: скачиваю файл который закрепил, и тестирую на нем. активирую лист База артикулов Выдает сразу ошибку (эксель 2016)
XL2010 делаю то же самое - ошибку не выдаёт
p.s. вы не указали формулировку ошибки?...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Общая нумерация и другие номера не имеют никакого значения
С нумерацией, как в примере. Макрос в стандартный модуль
Код
Sub Articul()
Dim i As Long
Dim iLastRow As Long
Dim iLR As Long
Dim FoundArticul As Range
Dim Baza As Worksheet
Dim EndVar As Worksheet
Dim n As Integer
Dim NomerTovara As Integer
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
 Set Baza = ThisWorkbook.Worksheets("База товаров")
 Set EndVar = ThisWorkbook.Worksheets("Конечный вариант")
   iLR = EndVar.Cells(Rows.Count, 2).End(xlUp).Row + 1
     EndVar.Range("A2:F" & iLR).Clear
   NomerTovara = 1
  For i = 3 To iLastRow
    Set FoundArticul = Baza.Columns(2).Find(Cells(i, 3), , xlValues, xlWhole)
    If Not FoundArticul Is Nothing Then
      n = 1
      Do
          n = n + 1
      Loop While Baza.Cells(FoundArticul.Row + n, 2) = Baza.Cells(FoundArticul.Row, 2)
       iLR = EndVar.Cells(Rows.Count, 2).End(xlUp).Row + 1
      Baza.Range(Baza.Cells(FoundArticul.Row, 2), Baza.Cells(FoundArticul.Row + n - 1, 6)).Copy _
      EndVar.Cells(iLR, 2)
      EndVar.Cells(iLR, 3) = NomerTovara
      NomerTovara = NomerTovara + 1
    End If
  Next
    EndVar.Activate
    iLR = EndVar.Cells(Rows.Count, 2).End(xlUp).Row
      Range("A2") = 2
    Range("A2:A" & iLR).DataSeries
End Sub
Изменено: Kuzmich - 03.04.2017 15:03:42
 
Цитата
JeyCi написал:
p.s. вы не указали формулировку ошибки?...
Вот это показывает
 
подскажите пожалуйста как запустить макрос, а то ошибку выдает
или пришлите свой вариант. Буду премного благодарен
 
Цитата
пришлите свой вариант
Макрос запускать при активном листе База артикулов
 
Все работает
Спасибо Вам огромное
Изменено: tahan - 05.04.2017 22:27:45
 
Цитата
Kuzmich написал:
Макрос запускать при активном листе База артикулов
скажите пожалуйста если артикулов 200-300 почему макрос все равно добавляет в конечную базу только 13 артикулов?
 
Цитата
если артикулов 200-300
На каком листе?
 
на конечном листе
 
У вас на листе База артикулов в столбце С 15 артикулов, из которых 2 артикула
не встречаются на листе База товаров. Поэтому в конечном варианте 13 артикулов.
 
Цитата
Kuzmich написал:
У вас на листе База артикулов в столбце С 15 артикуло
я имел ввиду если на листе База артикулов в столбце С будет 500 артикулов, то в Конечном листе все равно показывает 13 -14 артикулов.
Я прислал Вам образец где 500 Артикулов на листе База артикулов. попробуйте активировать Ваш макрос и посмотрите в конечный лист, Вы сразу поймете о чем я
Еще такой вопрос-как можно сделать чтобы в Базе артикулов,  не найдены Артикулы, как то отмечались чтобы понять что именно в Базе товаров не найдено?
Изменено: tahan - 06.04.2017 09:56:58
 
Цитата
то в Конечном листе все равно показывает 13 -14 артикулов.
У меня такого не наблюдается
Цитата
не найдены Артикулы, как то отмечались
В столбце D будет надпись "Нет такого артикула в базе товаров"
Смотрите файл
 
Цитата
Kuzmich написал:
У меня такого не наблюдается
Все работает
Можно последнюю поправку?) если в базе товаров у меня данные бывают до столбца АТ, то макрос все равно выгружает только до столбца Ф. Можно этот момент допилить?)
 
Цитата
если в базе товаров у меня данные бывают до столбца АТ
Надо в коде заменить две строки
Код
     EndVar.Range("A2:AT" & iLR).Clear
Код
      Baza.Range(Baza.Cells(FoundArticul.Row, 2), Baza.Cells(FoundArticul.Row + n - 1, 46)).Copy _
      EndVar.Cells(iLR, 2)
 
Цитата
Kuzmich написал:
Надо в коде заменить две строки
Все работает) спасибо большое
двух сотрудников уволили :D
 
Цитата
двух сотрудников уволили
Экономия фонда зарплаты, меня возьмите на полставки :)
Изменено: Kuzmich - 07.04.2017 11:24:15
 
Да я пошутил, но руководству передам)
Страницы: 1
Читают тему
Наверх