Имеется длинная выгрузка данных по продажам, блоками (Лист1). В полях "Логин" содержатся имена продавцов, блоки вперемешку. А мне нужно каким-то образом выгрузить блоки от конкретного продавца на отдельный лист. Дополнительная сложность в том, что все блоки разные по размеру. Также у нас есть лист, где указано какому продавцу соответствуют какие ID блоков (уникальные) (Лист2).
Как я это вижу: Вводим в ячейку "А15" логин продавца, который нам нужен. Затем жмём на кнопку макроса - и нужные блоки копируются на новый лист.
Или - хотя бы через формулы, поиск и пр. чтобы определённые блоки (с заданным логином) отображались на другом листе.
Никак не могу сообразить, как это сделать всё. Помогите, пожалуйста.
Привет всем!
Имеется длинная выгрузка данных по продажам, блоками (Лист1). В полях "Логин" содержатся имена продавцов, блоки вперемешку. А мне нужно каким-то образом выгрузить блоки от конкретного продавца на отдельный лист. Дополнительная сложность в том, что все блоки разные по размеру. Также у нас есть лист, где указано какому продавцу соответствуют какие ID блоков (уникальные) (Лист2).
Как я это вижу: Вводим в ячейку "А15" логин продавца, который нам нужен. Затем жмём на кнопку макроса - и нужные блоки копируются на новый лист.
Или - хотя бы через формулы, поиск и пр. чтобы определённые блоки (с заданным логином) отображались на другом листе.
Никак не могу сообразить, как это сделать всё. Помогите, пожалуйста.МЕХАНИЗМ
Спасибо огромное за труды, но на реальной выгрузке возникли проблемы. Я пока пытаюсь понять, что ему не нравится.
А ты не мог бы вкратце описать логику работы макроса? Я не очень понял, что ему важно.
Вроде сперва начинает выгружать, потом начинает зависать и выдаёт ошибку, Run-time error 28. Лист создаётся, сперва идут блоки с нужными логинами, а потом начинается всё вперемешку. Причём, на короткой, неполной выгрузке всё работает.
Спасибо огромное за труды, но на реальной выгрузке возникли проблемы. Я пока пытаюсь понять, что ему не нравится.
А ты не мог бы вкратце описать логику работы макроса? Я не очень понял, что ему важно.
Вроде сперва начинает выгружать, потом начинает зависать и выдаёт ошибку, Run-time error 28. Лист создаётся, сперва идут блоки с нужными логинами, а потом начинается всё вперемешку. Причём, на короткой, неполной выгрузке всё работает.МЕХАНИЗМ
Сообщение отредактировал Serge_007 - Среда, 29.11.2017, 17:21
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле) [moder]И обоим замечание за нарушение Правил форума получить тогда тоже можно[/moder]
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле) [moder]И обоим замечание за нарушение Правил форума получить тогда тоже можно[/moder]_Igor_61
Сообщение отредактировал _Boroda_ - Среда, 29.11.2017, 12:38
А как нужно поступать в таких случаях? Если файл большой? Сюда нельзя, на яндекс-диск или облако нельзя (сторонний ресурс), на почту тоже нельзя. А как можно?
А как нужно поступать в таких случаях? Если файл большой? Сюда нельзя, на яндекс-диск или облако нельзя (сторонний ресурс), на почту тоже нельзя. А как можно?_Igor_61
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)
Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)
Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?МЕХАНИЗМ
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)
Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?
Не знаю, нужно файл посмотреть - может из-за размера файла, тогда через массив нужно делать, а может что-то не все так, как в примере из сообщения 1. Если файл очень большой, можно заархивировать и загрузить сюда, если архив все равно будет больше 100 кб. можно на почту скинуть (почта в профиле)
Увы, прислать полную версию файла я пока не могу, я постараюсь придумать что-нибудь чуть позже. По поводу размера файла, там получается 18381 строка, это 1431 блок (другие выгрузки могут быть длиннее). Есть какое-то живое ограничение, для подобных макросов?МЕХАНИЗМ
Ну да, если делать перебор обычным циклом по листу, из-за большого количества строк вполне возможны тормоза. Но более конкретно можно будет сказать, увидев проблемный файл.
Ну да, если делать перебор обычным циклом по листу, из-за большого количества строк вполне возможны тормоза. Но более конкретно можно будет сказать, увидев проблемный файл._Igor_61
Сохранить в 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]
Самый крайний случай - письмо админу с просьбой временно снять ограничение. Но это только если совсем уж никак
Сохранить в 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]
Самый крайний случай - письмо админу с просьбой временно снять ограничение. Но это только если совсем уж никак
Да, попробуем справиться с этой вредной рекурсией! Правда, наверное весь макрос пересматривать нужно будет, но это полезно для приобретения опыта. А насчет
- там было за сторонний ресурс, а сейчас - за почту, так что я не повторил прежнее нарушение, а разнообразил новым
Да, попробуем справиться с этой вредной рекурсией! Правда, наверное весь макрос пересматривать нужно будет, но это полезно для приобретения опыта. А насчет
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]
[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
Да, попробуем справиться с этой вредной рекурсией! Правда, наверное весь макрос пересматривать нужно будет, но это полезно для приобретения опыта. А насчет
Попробовал, ошибка пропала. Но всё равно, результат тот же, выгружает вперемешку. Прислать полный файлик я не могу, это запрещено. Я могу только создать пример, похожий на неё. А потом уже самостоятельно перенести результат туда. Но на коротком примере всё получается, даже в выгрузке. Непонятно почему.
ВладимирG, а вот это, похоже, работает. Но вопрос, а как добавить сюда, чтобы выгружалось с сохранением форматирования? Сейчас выгружается просто текст.
Да, попробуем справиться с этой вредной рекурсией! Правда, наверное весь макрос пересматривать нужно будет, но это полезно для приобретения опыта. А насчет
Попробовал, ошибка пропала. Но всё равно, результат тот же, выгружает вперемешку. Прислать полный файлик я не могу, это запрещено. Я могу только создать пример, похожий на неё. А потом уже самостоятельно перенести результат туда. Но на коротком примере всё получается, даже в выгрузке. Непонятно почему.
ВладимирG, а вот это, похоже, работает. Но вопрос, а как добавить сюда, чтобы выгружалось с сохранением форматирования? Сейчас выгружается просто текст.МЕХАНИЗМ