在VBA excel中的范围
有人可以帮助我了解下面的代码。
Set items = Range("A2:A" & Range("A1").End(xlDown).Row)
我不明白的是如何设置范围? A2:A
和A1
覆盖哪个区域? 我知道如果我有一个像下面这个代码工作的表
但是,如果我更改表格位置以下如何更改示例代码?
在这里代码被分成几部分,在消息框中,你将能够看到发生了什么,HTH。
Sub test() ' Range.End Property: ' Returns a Range object that represents the cell at the end of the region that contains the source range. ' Equivalent to pressing END+DOWN ARROW. Dim endXlDown As Range Set endXlDown = Range("A1").End(xlDown) MsgBox "endXlDown.Address = " & endXlDown.Address Dim endXlDownRow As Long endXlDownRow = endXlDown.Row MsgBox "endXlDown.Row = " & endXlDown.Row Dim targetAddress As String targetAddress = "A2:A" & endXlDownRow MsgBox "targetAddress = " & targetAddress Dim items As Range Set items = Range(targetAddress) MsgBox "items.Address = " & items.Address items.Select ' and here you see the resulting range as selection End Sub
A2:A
和A1
覆盖哪个区域?
代码不是要覆盖A2:A
也不是A1
。
在这个代码中:
Set items = Range("A2:A" & Range("A1").End(xlDown).Row)
部分"A2:A" & Range("A1").End(xlDown).Row
被合并为Range()
一个参数:
-
A2:A
是一个String
; -
&
是一个String
连接运算符 ; -
Range("A1")
selectA1
; -
Range("A1").End(xlDown)
从A1
(本例中为A4
) 开始,向下selectA
的最后一个“区域”单元 。 -
Range("A1").End(xlDown).Row
返回所选单元格的行号 (在本例中为4)。
因此整个部分最终为"A2:A" & "4"
,或A2:A4
。
鉴于此,对于您的第二个屏幕截图,您可以使用类似的过程:
-
C5:C
从C5
(这是“Item”列的第一个“数据”单元格)中select; -
&
连接string; -
Range("C4")
selectC4
(它是“Item”列的“标题”单元格); -
Range("C4").End(xlDown)
从C4
开始向下selectC
最后一个非空单元; -
Range("C4").End(xlDown).Row
返回所选单元格的行号(在这种情况下,7);
所以对于你的第二个截图,你得到了:
Set items = Range("C5:C" & Range("C4").End(xlDown).Row)