Range.end(xldown)
только дает вам непрерывный диапазон (фактически он остановится на первой пустой ячейке).
Поскольку вы хотите включить пробелы, вы можете вместо этого работать с последней строкой вашего листавернуться к первой непустой ячейке, обнаруженной в этом столбце (это способ получения последней строки).
Это будет означать что-то вроде:
' If you are new to With statements (below), any objects within the With block that begin with a . relate to "Sheet1". Saves us typing Sheet1 repeatedly, and makes sense to use it since we access a lot of Sheet1's members like range/cells/rows
With Worksheets("Sheet1")
.Range("a2", .cells(.rows.count, "A").End(xlup)).Copy Worksheets("Sheet2").Range("a2") 'macro1
End with
Не проверено, написано намобильный - но надеюсь, что он работает или приближает вас к решению.Вам нужно будет скопировать и вставить вышеупомянутое и изменить A
на B, C, D, E и т. Д. Я не был слишком уверен, что вы пытаетесь достичь с условием «<0» в макросе 5 и6. </p>
(Было бы лучше, если бы вы превратили код в параметризованный Sub
и просто указали букву / номер столбца в качестве аргумента для подпрограммы, но это просто зависит от того, насколько вы новы для VBA и программирования вобщее - и на данный момент все, что вам легче понять / сохранить.)
Редактировать в отношении макроса 5 и 6
With Worksheets("Sheet1")
Dim cell as range
For each cell in .Range("E2", .Cells(.Rows.Count, "E").End(xlUp))
If cell.Value <= 0 Then 'Get rid of the equal sign if you don't want it in your logic/condition'
Cell.Copy Worksheets("Sheet2").cells(cell.row, "I") 'Macro5
ElseIf cell.value > 0 Then
Cell.Copy Worksheets("Sheet2").cells(cell.row, "J") 'Macro6
End If
Next cell
End With
Worksheets("Sheet2").Activate 'macro7