Доброго вечера всем! Столкнулся с проблемой, решение которой значительно облегчило бы рутинные задачи. В Excel файле первый столбик служит заголовком для каждой строчки, заголовок или статус для строки всего двух вариантов - латинская буква "u" или "s". Как написать VBA макрос, чтобы при его активации все строчки имеющие заголовок "s" из вкладки "1" были перенесены в следующую вкладку ("2") начиная с А3 и при этом в первой вкладке остались только строчки с заголовком "u" без пробелов между этими строчками.
Доброго вечера всем! Столкнулся с проблемой, решение которой значительно облегчило бы рутинные задачи. В Excel файле первый столбик служит заголовком для каждой строчки, заголовок или статус для строки всего двух вариантов - латинская буква "u" или "s". Как написать VBA макрос, чтобы при его активации все строчки имеющие заголовок "s" из вкладки "1" были перенесены в следующую вкладку ("2") начиная с А3 и при этом в первой вкладке остались только строчки с заголовком "u" без пробелов между этими строчками.sunnyb
Здравствуйте. Можно на первых порах попробовать записать все действия макрорекордером. Последовательность такая: включаете запись макроса--ставите на листе автофильтр--устанавливаете фильтр по букве u--копируете полученный диапазон--переходите на нужный лист --вставляете в нужную ячейку скопированное--возвращаетесь на первый лист--вновь выделяете диапазон с буквами u -- удаляете строки--снимаете автофильтр--выключаете запись макроса. Посмотрите что записалось макрорекордером, увеличьте при необходимости диапазон выделения. Теперь вы знаете что означает каждая написанная строка и можете её подправить при необходимость. А местные специалисты вам напишут, все будет работать, только чтобы подправить, придется снова обращаться на форум и просить о помощи.
Здравствуйте. Можно на первых порах попробовать записать все действия макрорекордером. Последовательность такая: включаете запись макроса--ставите на листе автофильтр--устанавливаете фильтр по букве u--копируете полученный диапазон--переходите на нужный лист --вставляете в нужную ячейку скопированное--возвращаетесь на первый лист--вновь выделяете диапазон с буквами u -- удаляете строки--снимаете автофильтр--выключаете запись макроса. Посмотрите что записалось макрорекордером, увеличьте при необходимости диапазон выделения. Теперь вы знаете что означает каждая написанная строка и можете её подправить при необходимость. А местные специалисты вам напишут, все будет работать, только чтобы подправить, придется снова обращаться на форум и просить о помощи.gling
ЯД-41001506838083
Сообщение отредактировал gling - Суббота, 26.11.2016, 00:54
Sub перенос() Dim L1 As Range, s& Dim L2 As Range, i& s = 4 For i = 4 To Range("A" & Rows.Count).End(xlUp).Row If Cells(i, 1) = "s" Then Set L1 = Sheets("1").Range("A" & i & ":E" & i) Set L2 = Sheets("2").Range("A" & s & ":E" & s) L1.Copy L2 Cells(i, 1) = "" s = s + 1 End If Next On Error Resume Next ActiveSheet.UsedRange.Columns(1).SpecialCells(4).EntireRow.Delete End Sub
[/vba]
Так пойдет? [vba]
Код
Sub перенос() Dim L1 As Range, s& Dim L2 As Range, i& s = 4 For i = 4 To Range("A" & Rows.Count).End(xlUp).Row If Cells(i, 1) = "s" Then Set L1 = Sheets("1").Range("A" & i & ":E" & i) Set L2 = Sheets("2").Range("A" & s & ":E" & s) L1.Copy L2 Cells(i, 1) = "" s = s + 1 End If Next On Error Resume Next ActiveSheet.UsedRange.Columns(1).SpecialCells(4).EntireRow.Delete End Sub
Sub d() Dim r As Range With [index(2!A:A,rows(A:A))].End(xlUp) Set r = IIf(.Row > 4, .Offset(1), [2!A4]) End With [1!A:A].Replace "s", "=zz1", 1 On Error Resume Next With [1!ZZ1].Dependents .Value = "s" .EntireRow.Copy r .EntireRow.Delete End With End Sub
[/vba]
или так[vba]
Код
Sub d() Dim r As Range With [index(2!A:A,rows(A:A))].End(xlUp) Set r = IIf(.Row > 4, .Offset(1), [2!A4]) End With [1!A:A].Replace "s", "=zz1", 1 On Error Resume Next With [1!ZZ1].Dependents .Value = "s" .EntireRow.Copy r .EntireRow.Delete End With End Sub