在VBA excel中的范围

有人可以帮助我了解下面的代码。

Set items = Range("A2:A" & Range("A1").End(xlDown).Row) 

我不明白的是如何设置范围? A2:AA1覆盖哪个区域? 我知道如果我有一个像下面这个代码工作的表

在这里输入图像说明

但是,如果我更改表格位置以下如何更改示例代码? 在这里输入图像说明

在这里代码被分成几部分,在消息框中,你将能够看到发生了什么,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:AA1覆盖哪个区域?

代码不是要覆盖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

鉴于此,对于您的第二个屏幕截图,您可以使用类似的过程:

  1. C5:CC5 (这是“Item”列的第一个“数据”单元格)中select;
  2. &连接string;
  3. Range("C4")selectC4 (它是“Item”列的“标题”单元格);
  4. Range("C4").End(xlDown)C4开始向下selectC最后一个非空单元;
  5. Range("C4").End(xlDown).Row返回所选单元格的行号(在这种情况下,7);

所以对于你的第二个截图,你得到了:

 Set items = Range("C5:C" & Range("C4").End(xlDown).Row)