我需要从工作表中提取一系列数据,其中前16行始终相同,但下面的数据会有所不同。我可以用这个
找到起始单元格Sheets("AA").Next.Select
Range("A17").Select
Selection.End(xlDown).Offset(2, 2).Select
然后我想使用(上面选择的起始单元格)计数单元格到包含数据的单元格的末尾。我试过这个
Range(Selection, Range(Selection.End(xlDown)).Rows.Count
及其上的各种变化但似乎无法使其发挥作用。我需要能够回顾起始单元格和行数,以便使用循环将数据从该单元格下拉到最后一个单元格(另一个主题我可能会在我到达目的地时提出问题)
有人可以帮忙吗?
答案 0 :(得分:0)
您对为什么尝试执行此操作的解释会让您觉得自己的工作量超出了自己的需要。
让我们创建几个函数。
我们将调用nextBlankCell
的第一个函数,它将自动获取空范围之前的最后一个单元格。在您的情况下,我们甚至可以使用您的选择来确定这一点 - 我们将在下一个函数中执行此操作。
Function nextBlankCell(ByVal startRng As Range) As Range
Set nextBlankCell = startRng.End(xlDown)
End Function
接下来,让我们创建一个功能,自动为您设置整个范围。在这种情况下,它将是从您当前选择到包含使用上述函数获得的数据的最后一行的范围。
Function getRngDownwards() As Range
Dim celStart As Range, celEnd As Range, ws As Worksheet
Set celStart = Selection
Set ws = celStart.Parent
Set celEnd = nextBlankCell(celStart)
Set getRngDownwards = ws.Range(celStart, celEnd)
End Function
在上面的函数中,我们有两个范围celStart
和celEnd
。 celStart
只是您当前的选择。如果您必须使用Selection
(大多数情况下不必要),我总是希望立即将您的选择设置为静态范围。
celEnd
是包含列中最后一个使用过的单元格的范围。
我们还通过使用选择的父对象来确定工作表ws
。 Protip:我们避免了ActiveSheet
!
现在你可以进行测试了:
Sub test()
' This test shows you the address of the range
MsgBox getRngDownwards.Address
' This test visually shows you the range
getRngDownwards.Select
End Sub