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

Вход

Регистрация

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

 

= Мир MS Excel/Выгрузить строки на новый лист по определённым параметрам. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Выгрузить строки на новый лист по определённым параметрам. (Формулы/Formulas)
Выгрузить строки на новый лист по определённым параметрам.
МЕХАНИЗМ Дата: Суббота, 25.11.2017, 11:31 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Привет всем!

Имеется длинная выгрузка данных по продажам, блоками (Лист1). В полях "Логин" содержатся имена продавцов, блоки вперемешку. А мне нужно каким-то образом выгрузить блоки от конкретного продавца на отдельный лист. Дополнительная сложность в том, что все блоки разные по размеру. Также у нас есть лист, где указано какому продавцу соответствуют какие ID блоков (уникальные) (Лист2).

Как я это вижу:
Вводим в ячейку "А15" логин продавца, который нам нужен. Затем жмём на кнопку макроса - и нужные блоки копируются на новый лист.

Или - хотя бы через формулы, поиск и пр. чтобы определённые блоки (с заданным логином) отображались на другом листе.

Никак не могу сообразить, как это сделать всё. :( Помогите, пожалуйста.
К сообщению приложен файл: 2214624.xlsx (15.1 Kb)


Сообщение отредактировал МЕХАНИЗМ - Суббота, 25.11.2017, 11:33
 
Ответить
СообщениеПривет всем!

Имеется длинная выгрузка данных по продажам, блоками (Лист1). В полях "Логин" содержатся имена продавцов, блоки вперемешку. А мне нужно каким-то образом выгрузить блоки от конкретного продавца на отдельный лист. Дополнительная сложность в том, что все блоки разные по размеру. Также у нас есть лист, где указано какому продавцу соответствуют какие ID блоков (уникальные) (Лист2).

Как я это вижу:
Вводим в ячейку "А15" логин продавца, который нам нужен. Затем жмём на кнопку макроса - и нужные блоки копируются на новый лист.

Или - хотя бы через формулы, поиск и пр. чтобы определённые блоки (с заданным логином) отображались на другом листе.

Никак не могу сообразить, как это сделать всё. :( Помогите, пожалуйста.

Автор - МЕХАНИЗМ
Дата добавления - 25.11.2017 в 11:31
_Igor_61 Дата: Понедельник, 27.11.2017, 00:32 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте! Кажется, что-то как-то получилось, :) проверяйте:
К сообщению приложен файл: 9155702.xlsm (29.7 Kb)
 
Ответить
СообщениеЗдравствуйте! Кажется, что-то как-то получилось, :) проверяйте:

Автор - _Igor_61
Дата добавления - 27.11.2017 в 00:32
МЕХАНИЗМ Дата: Среда, 29.11.2017, 11:44 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Спасибо огромное за труды, но на реальной выгрузке возникли проблемы. :( Я пока пытаюсь понять, что ему не нравится.

А ты не мог бы вкратце описать логику работы макроса? Я не очень понял, что ему важно.

Вроде сперва начинает выгружать, потом начинает зависать и выдаёт ошибку, Run-time error 28. Лист создаётся, сперва идут блоки с нужными логинами, а потом начинается всё вперемешку. Причём, на короткой, неполной выгрузке всё работает.


Сообщение отредактировал Serge_007 - Среда, 29.11.2017, 17:21
 
Ответить
СообщениеСпасибо огромное за труды, но на реальной выгрузке возникли проблемы. :( Я пока пытаюсь понять, что ему не нравится.

А ты не мог бы вкратце описать логику работы макроса? Я не очень понял, что ему важно.

Вроде сперва начинает выгружать, потом начинает зависать и выдаёт ошибку, Run-time error 28. Лист создаётся, сперва идут блоки с нужными логинами, а потом начинается всё вперемешку. Причём, на короткой, неполной выгрузке всё работает.

Автор - МЕХАНИЗМ
Дата добавления - 29.11.2017 в 11:44
_Igor_61 Дата: Среда, 29.11.2017, 12:23 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)
[moder]И обоим замечание за нарушение Правил форума получить тогда тоже можно[/moder]


Сообщение отредактировал _Boroda_ - Среда, 29.11.2017, 12:38
 
Ответить
СообщениеНе знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)
[moder]И обоим замечание за нарушение Правил форума получить тогда тоже можно[/moder]

Автор - _Igor_61
Дата добавления - 29.11.2017 в 12:23
_Boroda_ Дата: Среда, 29.11.2017, 12:39 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
_Igor_61,
можно на почту скинуть

Это что за безобразие?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение_Igor_61,
можно на почту скинуть

Это что за безобразие?

Автор - _Boroda_
Дата добавления - 29.11.2017 в 12:39
_Igor_61 Дата: Среда, 29.11.2017, 12:43 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
А как нужно поступать в таких случаях? Если файл большой? Сюда нельзя, на яндекс-диск или облако нельзя (сторонний ресурс), на почту тоже нельзя. А как можно?
 
Ответить
СообщениеА как нужно поступать в таких случаях? Если файл большой? Сюда нельзя, на яндекс-диск или облако нельзя (сторонний ресурс), на почту тоже нельзя. А как можно?

Автор - _Igor_61
Дата добавления - 29.11.2017 в 12:43
МЕХАНИЗМ Дата: Среда, 29.11.2017, 12:51 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)


Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?
 
Ответить
Сообщение
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)


Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?

Автор - МЕХАНИЗМ
Дата добавления - 29.11.2017 в 12:51
МЕХАНИЗМ Дата: Среда, 29.11.2017, 12:53 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)


Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?
 
Ответить
Сообщение
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)


Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?

Автор - МЕХАНИЗМ
Дата добавления - 29.11.2017 в 12:53
_Igor_61 Дата: Среда, 29.11.2017, 13:09 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Ну да, если делать перебор обычным циклом по листу, из-за большого количества строк вполне возможны тормоза. Но более конкретно можно будет сказать, увидев проблемный файл.
 
Ответить
СообщениеНу да, если делать перебор обычным циклом по листу, из-за большого количества строк вполне возможны тормоза. Но более конкретно можно будет сказать, увидев проблемный файл.

Автор - _Igor_61
Дата добавления - 29.11.2017 в 13:09
_Boroda_ Дата: Среда, 29.11.2017, 13:18 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А как нужно поступать в таких случаях?

Сохранить в xlsb, заархиваровать, опытным путем найти номер строки, где перестает работать и положить именно этот блок (и по паре выше-ниже его) сюда, да куча вариантов еще

Ну и в макросе (особо не вникал, что первое бросилось в глаза) убрать рекурсию. Просто цикл сделайте не с 3 по iCount, а наоборот с шагом -1
[vba]
Код
Sub Del_Shapka()
    Dim i, iCount
    iCount = Cells(Rows.Count, 5).End(xlUp).Row
  For i = iCount To 3 Step -1
   If Cells(i, 5) = "Логин" Then
      Rows(i).Delete shift:=xlUp
'      Del_Shapka
   End If
Next i
End Sub
[/vba]

Самый крайний случай - письмо админу с просьбой временно снять ограничение. Но это только если совсем уж никак

А, подождите, я Вам уже делал замечание по этому пункту. Потом снял.
http://www.excelworld.ru/forum/2-35197-231382-16-1505111416
Вы там писали
а насчет правил - буду стараться быть внимательней

Извинете, но вот теперь уж точно ловите замечание - Правила для всех одинаковы


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
А как нужно поступать в таких случаях?

Сохранить в xlsb, заархиваровать, опытным путем найти номер строки, где перестает работать и положить именно этот блок (и по паре выше-ниже его) сюда, да куча вариантов еще

Ну и в макросе (особо не вникал, что первое бросилось в глаза) убрать рекурсию. Просто цикл сделайте не с 3 по iCount, а наоборот с шагом -1
[vba]
Код
Sub Del_Shapka()
    Dim i, iCount
    iCount = Cells(Rows.Count, 5).End(xlUp).Row
  For i = iCount To 3 Step -1
   If Cells(i, 5) = "Логин" Then
      Rows(i).Delete shift:=xlUp
'      Del_Shapka
   End If
Next i
End Sub
[/vba]

Самый крайний случай - письмо админу с просьбой временно снять ограничение. Но это только если совсем уж никак

А, подождите, я Вам уже делал замечание по этому пункту. Потом снял.
http://www.excelworld.ru/forum/2-35197-231382-16-1505111416
Вы там писали
а насчет правил - буду стараться быть внимательней

Извинете, но вот теперь уж точно ловите замечание - Правила для всех одинаковы

Автор - _Boroda_
Дата добавления - 29.11.2017 в 13:18
_Igor_61 Дата: Среда, 29.11.2017, 14:00 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, спасибо! :)
 
Ответить
Сообщение_Boroda_, спасибо! :)

Автор - _Igor_61
Дата добавления - 29.11.2017 в 14:00
_Boroda_ Дата: Среда, 29.11.2017, 14:22 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
_Boroda_, спасибо!

За рекурсию? Всегда рад
За замечание? Аналогично


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
_Boroda_, спасибо!

За рекурсию? Всегда рад
За замечание? Аналогично

Автор - _Boroda_
Дата добавления - 29.11.2017 в 14:22
_Igor_61 Дата: Среда, 29.11.2017, 14:41 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
:)
Да, попробуем справиться с этой вредной рекурсией! Правда, наверное весь макрос пересматривать нужно будет, но это полезно для приобретения опыта. А насчет
уже делал замечание по этому пункту
- там было за сторонний ресурс, а сейчас - за почту, так что я не повторил прежнее нарушение, а разнообразил новым :)
 
Ответить
Сообщение:)
Да, попробуем справиться с этой вредной рекурсией! Правда, наверное весь макрос пересматривать нужно будет, но это полезно для приобретения опыта. А насчет
уже делал замечание по этому пункту
- там было за сторонний ресурс, а сейчас - за почту, так что я не повторил прежнее нарушение, а разнообразил новым :)

Автор - _Igor_61
Дата добавления - 29.11.2017 в 14:41
ВладимирG Дата: Среда, 29.11.2017, 14:58 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 22 ±
Замечаний: 0% ±

2007
[vba]
Код
Sub FindArea()
Dim name As String, x As Range, Adr&, kStr&, arr As Range, off&
name = Application.InputBox("Введите имя", "Имя продажника", "", 2)
Application.ScreenUpdating = 0
Set x = Columns(5).Find(name, , xlValues, xlWhole)
If Not x Is Nothing Then
    Adr = x.Row
    Do
        kStr = Cells(x.Row, 1).MergeArea.Count + 1
        Set arr = Cells(x.Row - 1, 1).Resize(kStr, 10)
        arr.Copy
        With Sheets(2).Range("D1").Offset(off)
            .PasteSpecial Paste:=xlPasteFormats
            .Resize(kStr, 10) = arr.Value
        End With
        Application.CutCopyMode = False
        off = off + kStr
        Set x = Columns(5).FindNext(x)
    Loop While Not x Is Nothing And Adr <> x.Row
End If
Application.ScreenUpdating = 1
End Sub
[/vba]


Сообщение отредактировал ВладимирG - Среда, 29.11.2017, 17:11
 
Ответить
Сообщение[vba]
Код
Sub FindArea()
Dim name As String, x As Range, Adr&, kStr&, arr As Range, off&
name = Application.InputBox("Введите имя", "Имя продажника", "", 2)
Application.ScreenUpdating = 0
Set x = Columns(5).Find(name, , xlValues, xlWhole)
If Not x Is Nothing Then
    Adr = x.Row
    Do
        kStr = Cells(x.Row, 1).MergeArea.Count + 1
        Set arr = Cells(x.Row - 1, 1).Resize(kStr, 10)
        arr.Copy
        With Sheets(2).Range("D1").Offset(off)
            .PasteSpecial Paste:=xlPasteFormats
            .Resize(kStr, 10) = arr.Value
        End With
        Application.CutCopyMode = False
        off = off + kStr
        Set x = Columns(5).FindNext(x)
    Loop While Not x Is Nothing And Adr <> x.Row
End If
Application.ScreenUpdating = 1
End Sub
[/vba]

Автор - ВладимирG
Дата добавления - 29.11.2017 в 14:58
МЕХАНИЗМ Дата: Среда, 29.11.2017, 16:39 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
За рекурсию? Всегда рад
За замечание? Аналогично

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

Попробовал, ошибка пропала. Но всё равно, результат тот же, выгружает вперемешку. Прислать полный файлик я не могу, это запрещено. Я могу только создать пример, похожий на неё. А потом уже самостоятельно перенести результат туда. Но на коротком примере всё получается, даже в выгрузке. Непонятно почему.

ВладимирG, а вот это, похоже, работает. Но вопрос, а как добавить сюда, чтобы выгружалось с сохранением форматирования? Сейчас выгружается просто текст.
К сообщению приложен файл: 6050796.xlsx (15.1 Kb)
 
Ответить
Сообщение
За рекурсию? Всегда рад
За замечание? Аналогично

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

Попробовал, ошибка пропала. Но всё равно, результат тот же, выгружает вперемешку. Прислать полный файлик я не могу, это запрещено. Я могу только создать пример, похожий на неё. А потом уже самостоятельно перенести результат туда. Но на коротком примере всё получается, даже в выгрузке. Непонятно почему.

ВладимирG, а вот это, похоже, работает. Но вопрос, а как добавить сюда, чтобы выгружалось с сохранением форматирования? Сейчас выгружается просто текст.

Автор - МЕХАНИЗМ
Дата добавления - 29.11.2017 в 16:39
ВладимирG Дата: Среда, 29.11.2017, 17:12 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 136
Репутация: 22 ±
Замечаний: 0% ±

2007
Пост № 14 обновлён.
 
Ответить
СообщениеПост № 14 обновлён.

Автор - ВладимирG
Дата добавления - 29.11.2017 в 17:12
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Выгрузить строки на новый лист по определённым параметрам. (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

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