Все добрый день! Требуются помощь знающих людей - сам точно не осилю Работаю с таблицей, в которой для сравнения результатов расчетов, нужно копировать значения из последних заполненных ячеек таблицы и вставлять на одну строчку ниже. Потом делается расчет с новыми данными в этой же таблице, и сравниваются полученные результаты. И вот если бы количество строк в таблице было неизменным, то было бы все просто. Но к сожалению оно каждый раз разное. Макрос с копированием и вставкой данных из конкретных ячеек я с грехом пополам сделал при помощи рикордера. А вот как в VBA написать чтобы копирование было из последней ячейки, содержащей данные, и вставка значения на строку ниже, я попросту не знаю. Вот такой у меня макрос получился. Ну пример с таблицей тоже прилагаю с тем же макросом [vba]
Код
Sub Сравнение() Range("B11:D11").Select Selection.Copy Range("B13").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("B13,C13,D13").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With End Sub
[/vba]
Все добрый день! Требуются помощь знающих людей - сам точно не осилю Работаю с таблицей, в которой для сравнения результатов расчетов, нужно копировать значения из последних заполненных ячеек таблицы и вставлять на одну строчку ниже. Потом делается расчет с новыми данными в этой же таблице, и сравниваются полученные результаты. И вот если бы количество строк в таблице было неизменным, то было бы все просто. Но к сожалению оно каждый раз разное. Макрос с копированием и вставкой данных из конкретных ячеек я с грехом пополам сделал при помощи рикордера. А вот как в VBA написать чтобы копирование было из последней ячейки, содержащей данные, и вставка значения на строку ниже, я попросту не знаю. Вот такой у меня макрос получился. Ну пример с таблицей тоже прилагаю с тем же макросом [vba]
Код
Sub Сравнение() Range("B11:D11").Select Selection.Copy Range("B13").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("B13,C13,D13").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With End Sub
Sub Сравнение() Set r1 = Cells(Rows.Count, 2).End(xlUp) Set r2 = Cells(1, 2).End(xlDown) With r1.Offset(IIf(r1.Row = r2.Row, 2, 1), 0).Resize(1, 3) .Value = r2.Resize(1, 3).Value With .Borders .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With End With End Sub
[/vba]
Добрый день. Вот такой вариант [vba]
Код
Sub Сравнение() Set r1 = Cells(Rows.Count, 2).End(xlUp) Set r2 = Cells(1, 2).End(xlDown) With r1.Offset(IIf(r1.Row = r2.Row, 2, 1), 0).Resize(1, 3) .Value = r2.Resize(1, 3).Value With .Borders .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With End With End Sub
Sub tt() Application.ScreenUpdating = 0 With Range("B" & Range("B" & Rows.Count).End(3).Row).Resize(1, 3) .Copy .Offset(2) .Offset(2).Value = .Value End With Application.ScreenUpdating = 1 End Sub
[/vba]
Еще вариант [vba]
Код
Sub tt() Application.ScreenUpdating = 0 With Range("B" & Range("B" & Rows.Count).End(3).Row).Resize(1, 3) .Copy .Offset(2) .Offset(2).Value = .Value End With Application.ScreenUpdating = 1 End Sub
А я подумал, что сравнений может быть несколько и они друг за другом записываться должны... Если все-таки по-одному сравнивать, то тогда и предыдущее удалять бы надо.
А я подумал, что сравнений может быть несколько и они друг за другом записываться должны... Если все-таки по-одному сравнивать, то тогда и предыдущее удалять бы надо.sboy
Sub tt() Application.ScreenUpdating = 0 With Range("B" & Range("A" & Rows.Count).End(3).Row).Resize(1, 3) .Copy .Offset(2) .Offset(2).Value = .Value End With Application.ScreenUpdating = 1 End Sub
[/vba]
А если несколько, то у меня так и делает в первом посте
Тогда так (если по одному) [vba]
Код
Sub tt() Application.ScreenUpdating = 0 With Range("B" & Range("A" & Rows.Count).End(3).Row).Resize(1, 3) .Copy .Offset(2) .Offset(2).Value = .Value End With Application.ScreenUpdating = 1 End Sub
[/vba]
А если несколько, то у меня так и делает в первом посте_Boroda_
Спасибо за оба варианта! Сидел разбирался как переназначить копирование - разобрался! Оба работают как надо. Только второй ( от Бороды) всасывает и вставляет еще и цвет заливки . Сейчас думаю какой лучше использовать. Вдогонку вопрос : как в тех же макросах сделать, чтобы перед вставленными данными, в той же строке в ячейку, прямо перед цифрами добавлялась некая аббревиатура (ну скажем ТТТ) залитая от таким зеленым цветом "Color = 5296274". Это требуется, чтобы можно было понимать что есть что. Пример прилагаю
Спасибо за оба варианта! Сидел разбирался как переназначить копирование - разобрался! Оба работают как надо. Только второй ( от Бороды) всасывает и вставляет еще и цвет заливки . Сейчас думаю какой лучше использовать. Вдогонку вопрос : как в тех же макросах сделать, чтобы перед вставленными данными, в той же строке в ячейку, прямо перед цифрами добавлялась некая аббревиатура (ну скажем ТТТ) залитая от таким зеленым цветом "Color = 5296274". Это требуется, чтобы можно было понимать что есть что. Пример прилагаюSerge1400