#excel #vba #copy
Вопрос:
Здравствуйте, у меня есть запрос VBA…
В настоящее время у меня есть некоторый код VBA, который, по сути, «отражает» /копирует определенный диапазон ячеек из другой книги/листа. (диапазон ячеек в основном состоит из ряда за рядом результатов теста).
Мой вопрос в том, есть ли способ скопировать последние 10 (или сколько угодно) строк данных вместо определенного диапазона?
Текущий Код:
Установить Dat1 = Рабочие книги(«Результаты теста.xlsm»).Рабочие листы(«Пример»).Диапазон(«AP31:AP15000»)
Raw1.Диапазон(«A3:A15000»).Изменение размера(Dat1.Строки.Количество, Дата 1.Столбцы.Граф).Ячейки.Значение = Dat1.Ячейки.Ценность
Таким образом, первая строка кода устанавливает Dat1 в качестве данных AP31:AP15000 из файла результатов теста.
Вторая строка в основном говорит о том, чтобы поместить значение Dat1 в Raw1 (что является моим пунктом назначения).
Как я уже сказал, я не уверен, смогу ли я все еще использовать этот же метод, скажем, для выбора последних 20 строк? Или мне нужно использовать другой метод?
Заранее спасибо, Том
Комментарии:
1. Вы можете попытаться найти последнюю использованную строку и изменить размер на 10 позиций вверх от этой ячейки.
2.
Range("AP31:AP15000").Rows(Range("AP31:AP15000").Rows.Count - 10 amp; ":" amp; Range("AP31:AP15000").Rows.Count)
3. @Nathan_Sav Спасибо, я попробую это сделать…
4. @Nathan_Sav Будет ли это все еще работать, даже если AP15000 не является последней строкой данных? Т. е. в нормальных условиях мы не узнаем, есть ли последняя строка данных?? (возможно, следовало упомянуть об этом в моем вопросе)
Ответ №1:
Я бы посоветовал проверить, какой диапазон вам нужно скопировать и использовать Offset()
, и Resize()
:
Sub Test()
Dim wb As Workbook: Set wb = Workbooks("Test Results.xlsm")
Dim ws As Worksheet: Set ws = wb.Worksheets("Example")
Dim rng As Range, lr As Long
lr = ws.Cells(ws.Rows.Count, 42).End(xlUp).Row
If lr > 11 Then
Set rng = ws.Cells(lr, 42).Offset(-9).Resize(10)
ElseIf lr > 2 Then
Set rng = ws.Range(ws.Cells(3, 42), ws.Cells(lr, 42))
End If
'Do whatever with the "rng" variable.
End Sub