Добрый день. Помогите, пожалуйста, в реализации следующей задачи: Имеется файл Excel c 4-мя листами, в первых трех хранятся позиции товаров, в четвертой вкладке "Заказ" должны аккумулироваться итоговые данные. В первых трех листах имеется столбец "Заказ" (количество столбцов на листах различается). Здесь для позиций, которые необходимо отгрузить, ставится количество. Если количество в строке указано, то данная строка должна копироваться в лист "Заказ", при этом заполняются столбцы "Артикул", "Наименование товара", "Количество". Далее считается стоимость и стоимость со скидкой, если заполнена строка "Скидка".
1) Как сделать так, чтобы сначала копировались позиции из листа "Вид 1", для которых заполнен столбец "Заказ", затем из листа "Вид 2" и "Вид 3". 2) Возможно ли в лист "Заказ" добавить кнопку, при нажатии на которую сформируется отдельный Excel-файл с итоговой формой заказа? При этом все введенные количества в листах с товарами (первые три листа) очистятся и форма заказа тоже в исходном файле.
Спасибо!
Добрый день. Помогите, пожалуйста, в реализации следующей задачи: Имеется файл Excel c 4-мя листами, в первых трех хранятся позиции товаров, в четвертой вкладке "Заказ" должны аккумулироваться итоговые данные. В первых трех листах имеется столбец "Заказ" (количество столбцов на листах различается). Здесь для позиций, которые необходимо отгрузить, ставится количество. Если количество в строке указано, то данная строка должна копироваться в лист "Заказ", при этом заполняются столбцы "Артикул", "Наименование товара", "Количество". Далее считается стоимость и стоимость со скидкой, если заполнена строка "Скидка".
1) Как сделать так, чтобы сначала копировались позиции из листа "Вид 1", для которых заполнен столбец "Заказ", затем из листа "Вид 2" и "Вид 3". 2) Возможно ли в лист "Заказ" добавить кнопку, при нажатии на которую сформируется отдельный Excel-файл с итоговой формой заказа? При этом все введенные количества в листах с товарами (первые три листа) очистятся и форма заказа тоже в исходном файле.
На листе Заказ Стоимость - это цена на остальных листах? Кол-во - это из столбца Заказ на остальных листах? Откуда берется Стоимость со скидкой?
На листе Заказ Стоимость - это цена на остальных листах? Кол-во - это из столбца Заказ на остальных листах? Откуда берется Стоимость со скидкой?Kuzmich
Kuzmich, Да, со стоимостью и количеством всё верно написали. Стоимость со скидкой - если заполнена строка "Скидка" на листе "Заказ". Зная стоимость (столбец E) - считается цена со скидкой.
Kuzmich, Да, со стоимостью и количеством всё верно написали. Стоимость со скидкой - если заполнена строка "Скидка" на листе "Заказ". Зная стоимость (столбец E) - считается цена со скидкой.Spark777
Макрос в модуль листа Заказ, кнопку сделайте сами [vba]
Код
Option Explicit Sub Sbor() Dim Sht As Worksheet Dim i As Long Dim iLastRow As Long Dim iLR As Long Dim ColArtikul As Integer Dim ColNaimenov As Integer Dim ColTsena As Integer Dim ColZakaz As Integer Dim Nomer As Integer Nomer = 1 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row If iLastRow > 7 Then Range("A7:E" & iLastRow).ClearContents End If For Each Sht In Worksheets If Sht.Name <> "Заказ" Then ' кроме листа "Заказ" With Sht iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 iLR = .Cells(.Rows.Count, 1).End(xlUp).Row ColZakaz = .Rows(1).Find("Заказ", , xlValues, xlWhole).Column ColTsena = .Rows(1).Find("Цена", , xlValues, xlWhole).Column ColNaimenov = .Rows(1).Find("Наименование", , xlValues, xlWhole).Column ColArtikul = .Rows(1).Find("Артикул", , xlValues, xlWhole).Column For i = 2 To iLR If Not IsEmpty(.Cells(i, ColZakaz)) Then Cells(iLastRow, 1) = Nomer Cells(iLastRow, 2) = .Cells(i, ColArtikul) Cells(iLastRow, 3) = .Cells(i, ColNaimenov) Cells(iLastRow, 4) = .Cells(i, ColZakaz) Cells(iLastRow, 5) = .Cells(i, ColTsena) iLastRow = iLastRow + 1 Nomer = Nomer + 1 End If Next End With End If Next End Sub
[/vba]
Макрос в модуль листа Заказ, кнопку сделайте сами [vba]
Код
Option Explicit Sub Sbor() Dim Sht As Worksheet Dim i As Long Dim iLastRow As Long Dim iLR As Long Dim ColArtikul As Integer Dim ColNaimenov As Integer Dim ColTsena As Integer Dim ColZakaz As Integer Dim Nomer As Integer Nomer = 1 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row If iLastRow > 7 Then Range("A7:E" & iLastRow).ClearContents End If For Each Sht In Worksheets If Sht.Name <> "Заказ" Then ' кроме листа "Заказ" With Sht iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 iLR = .Cells(.Rows.Count, 1).End(xlUp).Row ColZakaz = .Rows(1).Find("Заказ", , xlValues, xlWhole).Column ColTsena = .Rows(1).Find("Цена", , xlValues, xlWhole).Column ColNaimenov = .Rows(1).Find("Наименование", , xlValues, xlWhole).Column ColArtikul = .Rows(1).Find("Артикул", , xlValues, xlWhole).Column For i = 2 To iLR If Not IsEmpty(.Cells(i, ColZakaz)) Then Cells(iLastRow, 1) = Nomer Cells(iLastRow, 2) = .Cells(i, ColArtikul) Cells(iLastRow, 3) = .Cells(i, ColNaimenov) Cells(iLastRow, 4) = .Cells(i, ColZakaz) Cells(iLastRow, 5) = .Cells(i, ColTsena) iLastRow = iLastRow + 1 Nomer = Nomer + 1 End If Next End With End If Next End Sub
Лист Заказ можно оформить как итоговую форму заказа, а не формировать отдельный файл. А скидка берется из ячейки С2? Ячейки с Итого, Стоимость и Стоимость со скидкой лучше расположить под таблицей.
Лист Заказ можно оформить как итоговую форму заказа, а не формировать отдельный файл. А скидка берется из ячейки С2? Ячейки с Итого, Стоимость и Стоимость со скидкой лучше расположить под таблицей.Kuzmich
Kuzmich, Да, скидка это ячейка C2. С этим всё получилось. Добавил макрос SheetToFile() для сохранения листа "Заказ" в отдельный файл (кнопка "Сохранить лист в отдельный файл"). Подскажите, пожалуйста, какой код можно добавить в этот макрос, чтобы при нажатии этой кнопки помимо сохранения файла происходило и очищение столбца "Заказ" в первых трех листах (файл прикрепил).
Kuzmich, Да, скидка это ячейка C2. С этим всё получилось. Добавил макрос SheetToFile() для сохранения листа "Заказ" в отдельный файл (кнопка "Сохранить лист в отдельный файл"). Подскажите, пожалуйста, какой код можно добавить в этот макрос, чтобы при нажатии этой кнопки помимо сохранения файла происходило и очищение столбца "Заказ" в первых трех листах (файл прикрепил).Spark777
Мне этот способ не очень нравиться, т.к. в новой книге остаются оба макроса. Я уже предлагал использовать Лист Заказ как итоговую форму заказа. Посмотрите в приложенном примере. На листе Заказ нет никаких формул, все делается в макросе. А количество заказов каждого товара всегда 1 или может быть другое число. Если другое, то нужно переносить произведение кол-во*цена. Макрос перенесен в стандартный модуль, тогда при копировании листа Заказ в новой книге не будет макросов.
Цитата
при нажатии этой кнопки помимо сохранения файла
Мне этот способ не очень нравиться, т.к. в новой книге остаются оба макроса. Я уже предлагал использовать Лист Заказ как итоговую форму заказа. Посмотрите в приложенном примере. На листе Заказ нет никаких формул, все делается в макросе. А количество заказов каждого товара всегда 1 или может быть другое число. Если другое, то нужно переносить произведение кол-во*цена. Макрос перенесен в стандартный модуль, тогда при копировании листа Заказ в новой книге не будет макросов.Kuzmich
Извиняюсь за дилетантский вопрос: не могли Вы, пожалуйста, подсказать, как поправить код, когда количество не 1, а разное, т.е. чтобы шло умножение стоимости на количество, как Вы и написали.
Kuzmich,
Извиняюсь за дилетантский вопрос: не могли Вы, пожалуйста, подсказать, как поправить код, когда количество не 1, а разное, т.е. чтобы шло умножение стоимости на количество, как Вы и написали.Spark777