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

Вход

Регистрация

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

 

= Мир MS Excel/Последовательное копирование строк на новый лист - Мир MS Excel

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

Excel 2010
Добрый день.
Помогите, пожалуйста, в реализации следующей задачи:
Имеется файл Excel c 4-мя листами, в первых трех хранятся позиции товаров, в четвертой вкладке "Заказ" должны аккумулироваться итоговые данные.
В первых трех листах имеется столбец "Заказ" (количество столбцов на листах различается). Здесь для позиций, которые необходимо отгрузить, ставится количество. Если количество в строке указано, то данная строка должна копироваться в лист "Заказ", при этом заполняются столбцы "Артикул", "Наименование товара", "Количество". Далее считается стоимость и стоимость со скидкой, если заполнена строка "Скидка".

1) Как сделать так, чтобы сначала копировались позиции из листа "Вид 1", для которых заполнен столбец "Заказ", затем из листа "Вид 2" и "Вид 3".
2) Возможно ли в лист "Заказ" добавить кнопку, при нажатии на которую сформируется отдельный Excel-файл с итоговой формой заказа? При этом все введенные количества в листах с товарами (первые три листа) очистятся и форма заказа тоже в исходном файле.

Спасибо!
К сообщению приложен файл: Test.xlsx (12.1 Kb)
 
Ответить
СообщениеДобрый день.
Помогите, пожалуйста, в реализации следующей задачи:
Имеется файл Excel c 4-мя листами, в первых трех хранятся позиции товаров, в четвертой вкладке "Заказ" должны аккумулироваться итоговые данные.
В первых трех листах имеется столбец "Заказ" (количество столбцов на листах различается). Здесь для позиций, которые необходимо отгрузить, ставится количество. Если количество в строке указано, то данная строка должна копироваться в лист "Заказ", при этом заполняются столбцы "Артикул", "Наименование товара", "Количество". Далее считается стоимость и стоимость со скидкой, если заполнена строка "Скидка".

1) Как сделать так, чтобы сначала копировались позиции из листа "Вид 1", для которых заполнен столбец "Заказ", затем из листа "Вид 2" и "Вид 3".
2) Возможно ли в лист "Заказ" добавить кнопку, при нажатии на которую сформируется отдельный Excel-файл с итоговой формой заказа? При этом все введенные количества в листах с товарами (первые три листа) очистятся и форма заказа тоже в исходном файле.

Спасибо!

Автор - Spark777
Дата добавления - 19.04.2015 в 15:30
Kuzmich Дата: Воскресенье, 19.04.2015, 17:40 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
На листе Заказ Стоимость - это цена на остальных листах?
Кол-во - это из столбца Заказ на остальных листах?
Откуда берется Стоимость со скидкой?
 
Ответить
СообщениеНа листе Заказ Стоимость - это цена на остальных листах?
Кол-во - это из столбца Заказ на остальных листах?
Откуда берется Стоимость со скидкой?

Автор - Kuzmich
Дата добавления - 19.04.2015 в 17:40
Spark777 Дата: Воскресенье, 19.04.2015, 18:01 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Kuzmich,
Да, со стоимостью и количеством всё верно написали.
Стоимость со скидкой - если заполнена строка "Скидка" на листе "Заказ". Зная стоимость (столбец E) - считается цена со скидкой.
 
Ответить
СообщениеKuzmich,
Да, со стоимостью и количеством всё верно написали.
Стоимость со скидкой - если заполнена строка "Скидка" на листе "Заказ". Зная стоимость (столбец E) - считается цена со скидкой.

Автор - Spark777
Дата добавления - 19.04.2015 в 18:01
Kuzmich Дата: Воскресенье, 19.04.2015, 18:09 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Макрос в модуль листа Заказ, кнопку сделайте сами
[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
[/vba]

Автор - Kuzmich
Дата добавления - 19.04.2015 в 18:09
Spark777 Дата: Воскресенье, 19.04.2015, 20:33 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Kuzmich,
Огромное Вам спасибо. То, что нужно.
 
Ответить
СообщениеKuzmich,
Огромное Вам спасибо. То, что нужно.

Автор - Spark777
Дата добавления - 19.04.2015 в 20:33
Kuzmich Дата: Воскресенье, 19.04.2015, 20:41 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Лист Заказ можно оформить как итоговую форму заказа, а не формировать отдельный файл.
А скидка берется из ячейки С2?
Ячейки с Итого, Стоимость и Стоимость со скидкой лучше расположить под таблицей.
 
Ответить
СообщениеЛист Заказ можно оформить как итоговую форму заказа, а не формировать отдельный файл.
А скидка берется из ячейки С2?
Ячейки с Итого, Стоимость и Стоимость со скидкой лучше расположить под таблицей.

Автор - Kuzmich
Дата добавления - 19.04.2015 в 20:41
krosav4ig Дата: Воскресенье, 19.04.2015, 23:51 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Spark777, держите еще вариант
Заполняете столбцы Заказ на листах, на листе Заказ таблица формируется автоматически
К сообщению приложен файл: Test.xlsm (27.5 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеSpark777, держите еще вариант
Заполняете столбцы Заказ на листах, на листе Заказ таблица формируется автоматически

Автор - krosav4ig
Дата добавления - 19.04.2015 в 23:51
Spark777 Дата: Понедельник, 20.04.2015, 01:25 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Kuzmich,
Да, скидка это ячейка C2. С этим всё получилось.
Добавил макрос SheetToFile() для сохранения листа "Заказ" в отдельный файл (кнопка "Сохранить лист в отдельный файл"). Подскажите, пожалуйста, какой код можно добавить в этот макрос, чтобы при нажатии этой кнопки помимо сохранения файла происходило и очищение столбца "Заказ" в первых трех листах (файл прикрепил).
К сообщению приложен файл: 9564278.xlsm (26.3 Kb)
 
Ответить
СообщениеKuzmich,
Да, скидка это ячейка C2. С этим всё получилось.
Добавил макрос SheetToFile() для сохранения листа "Заказ" в отдельный файл (кнопка "Сохранить лист в отдельный файл"). Подскажите, пожалуйста, какой код можно добавить в этот макрос, чтобы при нажатии этой кнопки помимо сохранения файла происходило и очищение столбца "Заказ" в первых трех листах (файл прикрепил).

Автор - Spark777
Дата добавления - 20.04.2015 в 01:25
Spark777 Дата: Понедельник, 20.04.2015, 01:26 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
krosav4ig,
Спасибо большое за Ваш вариант.
 
Ответить
Сообщениеkrosav4ig,
Спасибо большое за Ваш вариант.

Автор - Spark777
Дата добавления - 20.04.2015 в 01:26
Kuzmich Дата: Понедельник, 20.04.2015, 11:45 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
при нажатии этой кнопки помимо сохранения файла

Мне этот способ не очень нравиться, т.к. в новой книге остаются оба макроса.
Я уже предлагал использовать Лист Заказ как итоговую форму заказа.
Посмотрите в приложенном примере. На листе Заказ нет никаких формул, все делается в макросе.
А количество заказов каждого товара всегда 1 или может быть другое число.
Если другое, то нужно переносить произведение кол-во*цена.
Макрос перенесен в стандартный модуль, тогда при копировании листа Заказ
в новой книге не будет макросов.
К сообщению приложен файл: 1941645.xls (55.5 Kb)
 
Ответить
Сообщение
Цитата
при нажатии этой кнопки помимо сохранения файла

Мне этот способ не очень нравиться, т.к. в новой книге остаются оба макроса.
Я уже предлагал использовать Лист Заказ как итоговую форму заказа.
Посмотрите в приложенном примере. На листе Заказ нет никаких формул, все делается в макросе.
А количество заказов каждого товара всегда 1 или может быть другое число.
Если другое, то нужно переносить произведение кол-во*цена.
Макрос перенесен в стандартный модуль, тогда при копировании листа Заказ
в новой книге не будет макросов.

Автор - Kuzmich
Дата добавления - 20.04.2015 в 11:45
Spark777 Дата: Пятница, 24.04.2015, 18:43 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Kuzmich,

Извиняюсь за дилетантский вопрос: не могли Вы, пожалуйста, подсказать, как поправить код, когда количество не 1, а разное, т.е. чтобы шло умножение стоимости на количество, как Вы и написали.
 
Ответить
СообщениеKuzmich,

Извиняюсь за дилетантский вопрос: не могли Вы, пожалуйста, подсказать, как поправить код, когда количество не 1, а разное, т.е. чтобы шло умножение стоимости на количество, как Вы и написали.

Автор - Spark777
Дата добавления - 24.04.2015 в 18:43
Kuzmich Дата: Суббота, 25.04.2015, 10:25 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
как поправить код

[vba]
Код

         Cells(iLastRow, 5) = .Cells(i, ColTsena) * .Cells(i, ColZakaz)
[/vba]


Сообщение отредактировал Kuzmich - Суббота, 25.04.2015, 10:27
 
Ответить
Сообщение
Цитата
как поправить код

[vba]
Код

         Cells(iLastRow, 5) = .Cells(i, ColTsena) * .Cells(i, ColZakaz)
[/vba]

Автор - Kuzmich
Дата добавления - 25.04.2015 в 10:25
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Последовательное копирование строк на новый лист (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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