Страницы: 1 2 След.
RSS
Как из нескольких листов(2,3,4) копировать автоматически строки в первый лист, если в этой строке есть определённая метка???
 
Здравствуйте уважаемые форумчане.
Как из нескольких листов(2,3,4) копировать автоматически строки в первый лист, если в этой строке есть определённая метка???
У меня есть прайс, на 2-4 листах сами прайсы от поставщиков, а на первом бланк заказа. Какаю формулу или функцию можно использовать, что бы строка в которой поставлена метка (например "х"), автоматически копировалась на первый лист??? Причём копировалась на следующую строку, если предыдущая занята. Заранее огромное спасибо, всем откликнувшимся.
Пример:
 
Формула будет громоздкой, Либо  VBA, либо MSquery, либо Powerquery.
Последнее в приложении, как более перспективное, но требует установленной надстройки или Excel 2016
Обновление по правой кнопке на таблице заказ, обновить.
По вопросам из тем форума, личку не читаю.
 
Макрос
Код
Sub Zakaz()
Dim Sht As Worksheet
Dim iLastRow As Long
  iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
  Range("A6:G" & iLastRow).Clear
    For Each Sht In Worksheets
      If Sht.Name <> "Заказ" Then
        With Sht
          iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
          .Range("A5").CurrentRegion.AutoFilter 7, "х"
          .AutoFilter.Range.Offset(1).SpecialCells(12).Copy Cells(iLastRow, 1)
          .AutoFilter.Range.AutoFilter
         End With
      End If
    Next
     iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
  Cells(iLastRow + 1, "E") = "Итого: "
  Cells(iLastRow + 1, "F") = WorksheetFunction.Sum(Range("F6:F" & iLastRow))
End Sub
 
Вы не могли бы в 2 словах написать что нужно изменять, что бы этот макрос работал в моём прайсе. СПС
Цитата
БМВ написал: Последнее в приложении, как более перспективное, но требует установленной надстройки или Excel 2016
У меня Excel 2016, но почему-то не работает. Пишет "Проверьте сервер или обратитесь а администратору базы данных."
 
Цитата
что бы этот макрос работал в моём прайсе
Так он и написан для вашего примера.
Перенесите макрос в стандартный модуль.
Находясь на листе Заказ запустите макрос (можно сделать кнопочку)
 
ОК СПС Буду пробовать.
А если кнопку, то как её сделать?
 
Цитата
Derek1305 написал:
если кнопку, то как её сделать?
Перейти в раздел "Приемы" и почитать  эту статью. Ищите "Кнопка на листе".
 
Цитата
Юрий М написал:
Перейти в раздел "Приемы" и почитать   эту  статью. Ищите "Кнопка на листе".
Огромное спасибо.
 
Kuzmich,доброго времени, подскажите, как сделать исключение для цикла  For Each если одном из листов Range("G6:G")<>"х". Спасибо
 
Я не Кузмич, но - да точно так же как откидывается лист "Заказ" - посчитать на этом листе количество "х" или "x" или обоих вместе, по всему столбцу или в нужном диапазоне, и если >0, то обрабатываете.
Изменено: Hugo - 10.12.2017 00:24:37
 
Hugo, доброго времени, в смысле перед  
Код
If Sht.Name <> "Заказ" Then
вставляем строку
Код
 If Range("G6:G")<>"х" Then
 
Выводит ошибку Next without for и выделяет Next
 
Цитата
Kuzmich написал:
Макрос
Не работает. Сохранил в книгу с поддержкой макросов, но всё-равно никак.
Пишет: "run time error 1004", потом нажимаю <Debug>  и выдаёт:
Изменено: Derek1305 - 10.12.2017 08:10:27
 
Derek1305, Вас не смущает что у вас там вопросительные знаки вместо названия листа?  Или меняйте код, или переименуйте лист.
По вопросам из тем форума, личку не читаю.
 
Derek1305,
Сравните ваш код с кодом из моего сообщения, исправьте знаки ?????
 
Навеяло тут формульное решение. Правда при увеличении количества прайсов будет сложно править.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Навеяло тут формульное решение. Правда при увеличении количества прайсов будет сложно править
Её можно использовать, но у меня около 30 листов в прайсе. Там много чего придётся скрывать.
Я тут нашёл формулу попроще, но "Индекс" не работает с несколькими листами.
 
Цитата
Kuzmich написал:
Сравните ваш код с кодом из моего сообщения, исправьте знаки ?????
Всё работает,Спасибо. Только вот вопрос, копирует строку и вставляет данные, а нужно что бы копировало и формулы. Когда в листе "Zakaz" подставляешь значение 1 или 2 или .... (в столбец "Количество") то формулы справа нет (((
И как сделать что бы не вставляло строку с суммой под заполняемыми строками.
 
Цитата
а нужно что бы копировало и формулы
Код
Sub Zakaz()
Dim Sht As Worksheet
Dim iLastRow As Long
  iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
  Range("A6:G" & iLastRow).Clear
    For Each Sht In Worksheets
      If Sht.Name <> "Zakaz" Then
        With Sht
          iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
          .Range("A5").CurrentRegion.AutoFilter 7, "z"
          '.AutoFilter.Range.Offset(1).SpecialCells(12).Copy Cells(iLastRow, 1)
          .AutoFilter.Range.Offset(1).SpecialCells(12).Copy
          Cells(iLastRow, 1).PasteSpecial xlPasteAll
          .AutoFilter.Range.AutoFilter
         End With
      End If
    Next
  '   iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
  'Cells(iLastRow + 1, "E") = "Итого: "
  'Cells(iLastRow + 1, "F") = WorksheetFunction.Sum(Range("F6:F" & iLastRow))
End Sub
 
Цитата
Kuzmich написал:
Сравните ваш код с кодом из моего сообщения, исправьте знаки ????
Извините за мою настойчивость, но так хочется оптимизировать прайс для быстрого просчёта.
Под вставленными строками, вставляется ещё одна строка, как сделать что бы она не вставлялась? Огромное вам человеческое СПАСИБО.
Изменено: Derek1305 - 10.12.2017 17:42:32
 
Kuzmich, а что если нет на листе "z"  
 
alex1210, написал
Цитата
а что если нет на листе "z"  
Добавить в код строчку
Код
          iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
          On Error Resume Next
          .Range("A5").CurrentRegion.AutoFilter 7, "z"
 
Цитата
Kuzmich написал:
Добавить в код строчку
Всё-равно ошибка... Лист "Вид1" без "z"...(((
Изменено: Derek1305 - 10.12.2017 18:04:22
 
Цитата
Всё-равно ошибка...
Не туда вставили
Код
        With Sht
          iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
          On Error Resume Next
          .Range("A5").CurrentRegion.AutoFilter 7, "z"
          '.AutoFilter.Range.Offset(1).SpecialCells(12).Copy Cells(iLastRow, 1)
          .AutoFilter.Range.Offset(1).SpecialCells(12).Copy
          Cells(iLastRow, 1).PasteSpecial xlPasteAll
          .AutoFilter.Range.AutoFilter
         End With
 
Под вставленными строками, вставляется ещё одна строка, как сделать что бы она не вставлялась?
Это видно когда мы делаем границы ячеек в таблице. Огромное вам человеческое СПАСИБО.
 
Kuzmich, блин а я всю голову сломал))) а решение простое
 
Цитата
вставляется ещё одна строка, как сделать что бы она не вставлялась?
Я так понимаю, эта пустая строка мешает формуле суммирования в F2 ?
Тогда сделайте так
Код
Sub Zakaz()
Dim Sht As Worksheet
Dim iLastRow As Long
  iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
  Range("A6:G" & iLastRow).Clear
    For Each Sht In Worksheets
      If Sht.Name <> "Zakaz" Then
        With Sht
          iLastRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
          On Error Resume Next
          .Range("A5").CurrentRegion.AutoFilter 7, "z"
          .AutoFilter.Range.Offset(1).SpecialCells(12).Copy
          Cells(iLastRow, 1).PasteSpecial xlPasteAll
          .AutoFilter.Range.AutoFilter
         End With
      End If
    Next
     iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
     If iLastRow = 5 Then iLastRow = 6
  Cells(2, "E") = "Итого: "
  Cells(2, "F").Formula = "=Sum(F6" & ":F" & iLastRow & ")" & ""
End Sub

 
Уже из спортивного интереса доделываю формульный вариант. С доп областями. Без них наверно никак. Летуче получится и требует настройки, но сработает.
По вопросам из тем форума, личку не читаю.
 
Цитата
Kuzmich написал:
Тогда сделайте так
Ничего, не поменялось, ну и бог с с ним. Всё равно всем спасибо за отклики.
 
 
Посмотрите на формулу в ячейке   F2 при различных количествах переносимых строк
Изменено: Kuzmich - 10.12.2017 23:21:12
Страницы: 1 2 След.
Наверх