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

Вход

Регистрация

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

 

= Мир MS Excel/Вложенные циклы для копирования отчетов с файла exel - Мир MS Excel

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

Excel 2010
Здравствуйте уважаемые мастера экселя!
Подскажите пожалуйста.
Создал таблицу.

В лист cop_1 копируются данные с другого файла экселя, в который автоматически копируется отчет при загрузки файла в ссылке из списка. (примеры образцов отчета в документе на листе отчет1, отчет2, отчет3 и отчет4).
Они все однотипные, только отличается количество строк (награжден), строка (победил) может находиться в любом месте отчета после строки (стат5).

не могу сделать цикл, что бы после загрузки всех отчетов в столбце (D) (с учетом копирования данных на против каждого отчет в списке), начиналась загрузка отчетов по списку в столбце (I) и так далее.

Затем все скопированные отчеты в столбец (D) копируются в лист filtr, где над ним производятся вычисления. Далее, все скопированные отчеты в столбец (I) копируются в лист filtr и так далее по очереди все столбцы с отчетами.

вероятно сам макрос цикла не очень сложный, но у меня не получается.

Файл прилагается. Очень надеюсь на вашу помощь, так как самостоятельно у меня такие сложные вложенные циклы не получаются.
Заранее благодарен всем. кто сможет помочь!
К сообщению приложен файл: ras_res.xlsm (37.2 Kb)
 
Ответить
СообщениеЗдравствуйте уважаемые мастера экселя!
Подскажите пожалуйста.
Создал таблицу.

В лист cop_1 копируются данные с другого файла экселя, в который автоматически копируется отчет при загрузки файла в ссылке из списка. (примеры образцов отчета в документе на листе отчет1, отчет2, отчет3 и отчет4).
Они все однотипные, только отличается количество строк (награжден), строка (победил) может находиться в любом месте отчета после строки (стат5).

не могу сделать цикл, что бы после загрузки всех отчетов в столбце (D) (с учетом копирования данных на против каждого отчет в списке), начиналась загрузка отчетов по списку в столбце (I) и так далее.

Затем все скопированные отчеты в столбец (D) копируются в лист filtr, где над ним производятся вычисления. Далее, все скопированные отчеты в столбец (I) копируются в лист filtr и так далее по очереди все столбцы с отчетами.

вероятно сам макрос цикла не очень сложный, но у меня не получается.

Файл прилагается. Очень надеюсь на вашу помощь, так как самостоятельно у меня такие сложные вложенные циклы не получаются.
Заранее благодарен всем. кто сможет помочь!

Автор - orionis
Дата добавления - 05.02.2017 в 14:05
lFJl Дата: Понедельник, 06.02.2017, 09:12 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
orionis, Можете заполнить файл, как должно получиться в итоге?
 
Ответить
Сообщениеorionis, Можете заполнить файл, как должно получиться в итоге?

Автор - lFJl
Дата добавления - 06.02.2017 в 09:12
orionis Дата: Четверг, 09.02.2017, 17:33 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Из всех перечисленных мной вопросов остался только один (остальные решил).
не получается отфильтровать столбцы
в приведенном ниже макросе пытаюсь отфильтровать столбцы по порядку. с указанной позиции. в которой есть текст, с копированием отфильтрованных ячеек с данными на другой лист. Первый фильтр колонки с текстом срабатывает хорошо, далее, фильтр ломается, и фильтрует опять первую колонку, но уже по второму критерию.
Подскажите пожалуйста, где ошибка?

[vba]
Код
Sub copy_areal()
'
   Dim cx As Integer
   Dim clog As Integer
   Dim dVal As Range
   Dim xytxt1 As Long

clog = 4
xytxt1 = 32

    Do While Not IsEmpty(Cells(xytxt1, clog))

Call clear_filtr_n

    Application.CutCopyMode = False

   Set Col_x = Sheets("blank").Columns(clog)

    Sheets("blank").Activate
    Cells(xytxt1, clog).Activate
        
   Worksheets("blank").Range(Worksheets("blank").Cells(xytxt1, clog), Worksheets("blank").Cells(xytxt1 + 0, clog)).Select
        
    Selection.AutoFilter Field:=1, Criteria1:="*" & Cells(xytxt1, clog) & "*", Operator:=xlAnd
        
    Range(Cells(xytxt1, clog - 1), Cells(xytxt1 + 1000, clog)).Select

    Selection.RowDifferences(ActiveCell).Select
    Selection.Copy
    Sheets("filtr").Select
    Range("A1").Select
    ActiveSheet.Paste
                
clog = clog + 5
xytxt1 = xytxt1 + 0

Loop

End Sub

Sub clear_filtr_n()
'
    Sheets("blank").Select
For i = 1 To Sheets.Count
If Sheets(i).FilterMode = True Then Sheets(i).ShowAllData
Next i
End Sub
[/vba]
 
Ответить
СообщениеИз всех перечисленных мной вопросов остался только один (остальные решил).
не получается отфильтровать столбцы
в приведенном ниже макросе пытаюсь отфильтровать столбцы по порядку. с указанной позиции. в которой есть текст, с копированием отфильтрованных ячеек с данными на другой лист. Первый фильтр колонки с текстом срабатывает хорошо, далее, фильтр ломается, и фильтрует опять первую колонку, но уже по второму критерию.
Подскажите пожалуйста, где ошибка?

[vba]
Код
Sub copy_areal()
'
   Dim cx As Integer
   Dim clog As Integer
   Dim dVal As Range
   Dim xytxt1 As Long

clog = 4
xytxt1 = 32

    Do While Not IsEmpty(Cells(xytxt1, clog))

Call clear_filtr_n

    Application.CutCopyMode = False

   Set Col_x = Sheets("blank").Columns(clog)

    Sheets("blank").Activate
    Cells(xytxt1, clog).Activate
        
   Worksheets("blank").Range(Worksheets("blank").Cells(xytxt1, clog), Worksheets("blank").Cells(xytxt1 + 0, clog)).Select
        
    Selection.AutoFilter Field:=1, Criteria1:="*" & Cells(xytxt1, clog) & "*", Operator:=xlAnd
        
    Range(Cells(xytxt1, clog - 1), Cells(xytxt1 + 1000, clog)).Select

    Selection.RowDifferences(ActiveCell).Select
    Selection.Copy
    Sheets("filtr").Select
    Range("A1").Select
    ActiveSheet.Paste
                
clog = clog + 5
xytxt1 = xytxt1 + 0

Loop

End Sub

Sub clear_filtr_n()
'
    Sheets("blank").Select
For i = 1 To Sheets.Count
If Sheets(i).FilterMode = True Then Sheets(i).ShowAllData
Next i
End Sub
[/vba]

Автор - orionis
Дата добавления - 09.02.2017 в 17:33
sboy Дата: Четверг, 09.02.2017, 17:53 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
[vba]
Код
Selection.AutoFilter Field:=1
[/vba]
Вот тут у Вас всегда фильтр по первому полю


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
[vba]
Код
Selection.AutoFilter Field:=1
[/vba]
Вот тут у Вас всегда фильтр по первому полю

Автор - sboy
Дата добавления - 09.02.2017 в 17:53
orionis Дата: Четверг, 09.02.2017, 21:32 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо! тоже думал про него...
Попробовал сделать так:
[vba]
Код
Selection.AutoFilter Field:=clog-3
[/vba]


Сообщение отредактировал orionis - Четверг, 09.02.2017, 22:00
 
Ответить
СообщениеСпасибо! тоже думал про него...
Попробовал сделать так:
[vba]
Код
Selection.AutoFilter Field:=clog-3
[/vba]

Автор - orionis
Дата добавления - 09.02.2017 в 21:32
orionis Дата: Четверг, 09.02.2017, 22:00 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Как бы работает. но почему то если включать запуск макроса, дальше второго фильтруемого столбца не идет, сбрасывает, а если пошагово выполнять, то иногда фильтрует дальше иногда не далее второго фильтруемого столбца.
Подскажите пожалуйста. в чем может быть причина?
 
Ответить
СообщениеКак бы работает. но почему то если включать запуск макроса, дальше второго фильтруемого столбца не идет, сбрасывает, а если пошагово выполнять, то иногда фильтрует дальше иногда не далее второго фильтруемого столбца.
Подскажите пожалуйста. в чем может быть причина?

Автор - orionis
Дата добавления - 09.02.2017 в 22:00
sboy Дата: Пятница, 10.02.2017, 09:07 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
orionis, Приложите файл, посмотрим


Яндекс: 410016850021169
 
Ответить
Сообщениеorionis, Приложите файл, посмотрим

Автор - sboy
Дата добавления - 10.02.2017 в 09:07
orionis Дата: Пятница, 10.02.2017, 12:20 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Файл приложил...теперь останавливается на первом фильтре и не копирует голову фильтра.Что происходит, даже не могу понять.
Макрос должен перебрать все столбцы с текстом, скопировав по очереди результаты фильтра на лист filtr. Если текста в ячейке 33 столбца с текстом нет, то цикл останавливается
К сообщению приложен файл: ras_res1.xlsm (26.1 Kb)


Сообщение отредактировал orionis - Пятница, 10.02.2017, 12:40
 
Ответить
СообщениеФайл приложил...теперь останавливается на первом фильтре и не копирует голову фильтра.Что происходит, даже не могу понять.
Макрос должен перебрать все столбцы с текстом, скопировав по очереди результаты фильтра на лист filtr. Если текста в ячейке 33 столбца с текстом нет, то цикл останавливается

Автор - orionis
Дата добавления - 10.02.2017 в 12:20
sboy Дата: Пятница, 10.02.2017, 12:57 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Чуток подправил
[vba]
Код
Sub copy_areal()
'
Dim cx As Integer
Dim clog As Integer
Dim Col_x As Range
Dim xytxt1 As Long

clog = 4
xytxt1 = 32
With Sheets("blank")
    Do While Not IsEmpty(.Cells(xytxt1, clog))

Call clear_filtr_n

    Application.CutCopyMode = False

Set Col_x = .Columns(clog)

    'Sheets("blank").Activate
    .Cells(xytxt1, clog).Select
        
'Worksheets("blank").Range(Worksheets("blank").Cells(xytxt1, clog), Worksheets("blank").Cells(xytxt1 + 0, clog)).Select
        
    Selection.AutoFilter Field:=clog - 3, Criteria1:="*" & Cells(xytxt1, clog) & "*", Operator:=xlAnd
        
    .Range(Cells(xytxt1, clog - 1), Cells(xytxt1 + 200, clog)).Select

    Selection.RowDifferences(ActiveCell).Select
    Selection.Copy
    Sheets("filtr").Select
    Range("A1").Select
    ActiveSheet.Paste
                
clog = clog + 5
'xytxt1 = xytxt1 + 0

Loop
End With
End Sub
[/vba]
К сообщению приложен файл: 5400331.xlsm (27.8 Kb)


Яндекс: 410016850021169
 
Ответить
СообщениеЧуток подправил
[vba]
Код
Sub copy_areal()
'
Dim cx As Integer
Dim clog As Integer
Dim Col_x As Range
Dim xytxt1 As Long

clog = 4
xytxt1 = 32
With Sheets("blank")
    Do While Not IsEmpty(.Cells(xytxt1, clog))

Call clear_filtr_n

    Application.CutCopyMode = False

Set Col_x = .Columns(clog)

    'Sheets("blank").Activate
    .Cells(xytxt1, clog).Select
        
'Worksheets("blank").Range(Worksheets("blank").Cells(xytxt1, clog), Worksheets("blank").Cells(xytxt1 + 0, clog)).Select
        
    Selection.AutoFilter Field:=clog - 3, Criteria1:="*" & Cells(xytxt1, clog) & "*", Operator:=xlAnd
        
    .Range(Cells(xytxt1, clog - 1), Cells(xytxt1 + 200, clog)).Select

    Selection.RowDifferences(ActiveCell).Select
    Selection.Copy
    Sheets("filtr").Select
    Range("A1").Select
    ActiveSheet.Paste
                
clog = clog + 5
'xytxt1 = xytxt1 + 0

Loop
End With
End Sub
[/vba]

Автор - sboy
Дата добавления - 10.02.2017 в 12:57
sboy Дата: Пятница, 10.02.2017, 13:01 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Странный макрос получился) попробую вникнуть в суть задачи...
Upd.
Так Вы в одну и туже ячейку копируете циклом
[vba]
Код
Sheets("filtr").Select
    Range("A1").Select
    ActiveSheet.Paste
[/vba]
куда надо правильно? ниже или рядом?


Яндекс: 410016850021169

Сообщение отредактировал sboy - Пятница, 10.02.2017, 13:05
 
Ответить
СообщениеСтранный макрос получился) попробую вникнуть в суть задачи...
Upd.
Так Вы в одну и туже ячейку копируете циклом
[vba]
Код
Sheets("filtr").Select
    Range("A1").Select
    ActiveSheet.Paste
[/vba]
куда надо правильно? ниже или рядом?

Автор - sboy
Дата добавления - 10.02.2017 в 13:01
orionis Дата: Пятница, 10.02.2017, 13:15 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
они копируются по очереди, куда указано, просто там с ними будет производиться действие, уже отдельным макросом, не влияющим на фильтр.
 
Ответить
Сообщениеони копируются по очереди, куда указано, просто там с ними будет производиться действие, уже отдельным макросом, не влияющим на фильтр.

Автор - orionis
Дата добавления - 10.02.2017 в 13:15
orionis Дата: Пятница, 10.02.2017, 13:22 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
попробовал вставить ваш подправленный макрос. но он копирует все и почему то начиная с колонки ccc, а не с колонки aaa
 
Ответить
Сообщениепопробовал вставить ваш подправленный макрос. но он копирует все и почему то начиная с колонки ccc, а не с колонки aaa

Автор - orionis
Дата добавления - 10.02.2017 в 13:22
sboy Дата: Пятница, 10.02.2017, 13:29 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
orionis, я же Вам чуть выше написал, что копируете в одну и ту же ячейку.
Т.е. он копирует ааа, потом сверху на него копирует bbb, потом ссс


Яндекс: 410016850021169
 
Ответить
Сообщениеorionis, я же Вам чуть выше написал, что копируете в одну и ту же ячейку.
Т.е. он копирует ааа, потом сверху на него копирует bbb, потом ссс

Автор - sboy
Дата добавления - 10.02.2017 в 13:29
orionis Дата: Пятница, 10.02.2017, 13:36 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
он и должен копировать отфильтрованные данные в ту же ячейку на листе filtr, но по очереди каждыю отфильтрованный столбец, сначала ааа, потом лист filtr очищается, потом bbb, потом лист filtr очищается, потом ссс, потом лист filtr очищается, и так далее, пока не встретит условие (Если текста в ячейке 33 столбца с текстом нет, то цикл останавливается)


Сообщение отредактировал orionis - Пятница, 10.02.2017, 13:55
 
Ответить
Сообщениеон и должен копировать отфильтрованные данные в ту же ячейку на листе filtr, но по очереди каждыю отфильтрованный столбец, сначала ааа, потом лист filtr очищается, потом bbb, потом лист filtr очищается, потом ссс, потом лист filtr очищается, и так далее, пока не встретит условие (Если текста в ячейке 33 столбца с текстом нет, то цикл останавливается)

Автор - orionis
Дата добавления - 10.02.2017 в 13:36
sboy Дата: Пятница, 10.02.2017, 13:46 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
orionis, Все, что Вы написали, макрос с успехом реализует. Видимо, Вы от него ждете чего-то другого.
Попробуйте руками сделать конечный результат, тогда я пойму, где ошибка в Вашей логике.


Яндекс: 410016850021169
 
Ответить
Сообщениеorionis, Все, что Вы написали, макрос с успехом реализует. Видимо, Вы от него ждете чего-то другого.
Попробуйте руками сделать конечный результат, тогда я пойму, где ошибка в Вашей логике.

Автор - sboy
Дата добавления - 10.02.2017 в 13:46
orionis Дата: Пятница, 10.02.2017, 14:03 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Извините, забыл добавить код, так как он был в отдельном макросе вычислений...
[vba]
Код
    Columns("A:A").Select
    Selection.ClearContents
[/vba]

Сейчас добавил, все идет хорошо, но при по шаговом выполнении, почему то столбец без текста тоже фильтруется и копируется, а цикл должен на нем остановиться, так как там нет данных
 
Ответить
СообщениеИзвините, забыл добавить код, так как он был в отдельном макросе вычислений...
[vba]
Код
    Columns("A:A").Select
    Selection.ClearContents
[/vba]

Сейчас добавил, все идет хорошо, но при по шаговом выполнении, почему то столбец без текста тоже фильтруется и копируется, а цикл должен на нем остановиться, так как там нет данных

Автор - orionis
Дата добавления - 10.02.2017 в 14:03
orionis Дата: Пятница, 10.02.2017, 14:21 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
немножко изменил
[vba]
Код
    Do While Not IsEmpty(.Cells(xytxt1+1, clog))
[/vba]
теперь вроде работает.
Большое Спасибо за помощь!
 
Ответить
Сообщениенемножко изменил
[vba]
Код
    Do While Not IsEmpty(.Cells(xytxt1+1, clog))
[/vba]
теперь вроде работает.
Большое Спасибо за помощь!

Автор - orionis
Дата добавления - 10.02.2017 в 14:21
sboy Дата: Пятница, 10.02.2017, 14:24 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Надо изменить или формулу на листе или проверку условия
[vba]
Код
Do While Not IsEmpty(.Cells(xytxt1, clog))
[/vba]
так как там нет данных
данные Вы не проверяете, а проверяете заголовок фильтра. В заголовке у Вас 0 (ноль). Not IsEmpty 0 дает true, следовательно цикл продолжается


Яндекс: 410016850021169
 
Ответить
СообщениеНадо изменить или формулу на листе или проверку условия
[vba]
Код
Do While Not IsEmpty(.Cells(xytxt1, clog))
[/vba]
так как там нет данных
данные Вы не проверяете, а проверяете заголовок фильтра. В заголовке у Вас 0 (ноль). Not IsEmpty 0 дает true, следовательно цикл продолжается

Автор - sboy
Дата добавления - 10.02.2017 в 14:24
orionis Дата: Пятница, 10.02.2017, 14:40 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
да, согласен с вами, надо будет как то изменить условие
 
Ответить
Сообщениеда, согласен с вами, надо будет как то изменить условие

Автор - orionis
Дата добавления - 10.02.2017 в 14:40
orionis Дата: Пятница, 10.02.2017, 15:03 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Так будет правильно?
[vba]
Код
Do While Not IsEmpty(.Cells(xytxt1 + 1, clog)) And Cells(xytxt1, clog) <> 0
[/vba]


Сообщение отредактировал orionis - Пятница, 10.02.2017, 15:03
 
Ответить
СообщениеТак будет правильно?
[vba]
Код
Do While Not IsEmpty(.Cells(xytxt1 + 1, clog)) And Cells(xytxt1, clog) <> 0
[/vba]

Автор - orionis
Дата добавления - 10.02.2017 в 15:03
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вложенные циклы для копирования отчетов с файла exel (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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