Добрый день, уважаемые специалисты..У меня наверное глупый вопрос, но ответа на него в форуме не нашел.Есть две одинаковые таблицы (по столбцам), находятся на разных листах. Все их отличие в том,что на первой находятся исходящие данные, а на втором входящие. Задача собрать их в одну на третьем листе, дабы потом по аргументам вычислить изменения ..Как сделать это на одном листе при помощи форума и форумчан я понял. В приложенном файле это сделано на листе1, но как только встал вопрос такого же действия с разных листов (2) и (4) на лист "сумма" я впал в ступор. Помогите пожалуйста с кодом. ...Таблицы будут постоянно увеличиваться.Кроме этого в таблицах есть и другие данные, которые в общей таблице не нужны. Спасибо
Добрый день, уважаемые специалисты..У меня наверное глупый вопрос, но ответа на него в форуме не нашел.Есть две одинаковые таблицы (по столбцам), находятся на разных листах. Все их отличие в том,что на первой находятся исходящие данные, а на втором входящие. Задача собрать их в одну на третьем листе, дабы потом по аргументам вычислить изменения ..Как сделать это на одном листе при помощи форума и форумчан я понял. В приложенном файле это сделано на листе1, но как только встал вопрос такого же действия с разных листов (2) и (4) на лист "сумма" я впал в ступор. Помогите пожалуйста с кодом. ...Таблицы будут постоянно увеличиваться.Кроме этого в таблицах есть и другие данные, которые в общей таблице не нужны. Спасибоalex808
alex808, просто уберите из макроса вызов формы, и я бы добавила очищение листа "сумма" в начало. Внесла правки в макрос от devilkurs [vba]
Код
Sub Макрос3() ' ' Макрос3 Макрос ' ' Сочетание клавиш: Ctrl+й ' ' NameList = "": bStop = False ThisWorkbook.Worksheets("сумма").[a1].CurrentRegion.Offset(1).Clear'Очищаем лист For Each Sh In Array(Sheets("Лист2"), Sheets("Лист4")) ' ВыборЛиста.Show (vbModal) ' If bStop Then GoTo сюда: With Sh lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row .Range("A2:D" & lLastRow).Copy Sheets("сумма").Range("A" & Sheets("сумма").Cells(Sheets("сумма").Rows.Count, 1).End(xlUp).Row + 1) End With Application.CutCopyMode = False Next сюда: With Application.ThisWorkbook.Worksheets("сумма") .AutoFilter.Sort.SortFields.Clear .AutoFilter.Sort.SortFields.Add _ Key:=.Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With .AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
.Range("E2:E" & .Cells(.Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = "=IFERROR(-LOOKUP(2,1/(R1C2:R[-1]C[-3]=RC[-3]),R1C4:R[-1]C[-1])+RC[-1],0)" End With End Sub
[/vba]
alex808, просто уберите из макроса вызов формы, и я бы добавила очищение листа "сумма" в начало. Внесла правки в макрос от devilkurs [vba]
Код
Sub Макрос3() ' ' Макрос3 Макрос ' ' Сочетание клавиш: Ctrl+й ' ' NameList = "": bStop = False ThisWorkbook.Worksheets("сумма").[a1].CurrentRegion.Offset(1).Clear'Очищаем лист For Each Sh In Array(Sheets("Лист2"), Sheets("Лист4")) ' ВыборЛиста.Show (vbModal) ' If bStop Then GoTo сюда: With Sh lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row .Range("A2:D" & lLastRow).Copy Sheets("сумма").Range("A" & Sheets("сумма").Cells(Sheets("сумма").Rows.Count, 1).End(xlUp).Row + 1) End With Application.CutCopyMode = False Next сюда: With Application.ThisWorkbook.Worksheets("сумма") .AutoFilter.Sort.SortFields.Clear .AutoFilter.Sort.SortFields.Add _ Key:=.Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With .AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
.Range("E2:E" & .Cells(.Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = "=IFERROR(-LOOKUP(2,1/(R1C2:R[-1]C[-3]=RC[-3]),R1C4:R[-1]C[-1])+RC[-1],0)" End With End Sub