VBA Excel – 基于单元格范围值的循环

所以我正在运行一个循环来抓取另一张纸上的一列的数据,我希望一旦列中的数据结束,它就会停止,但是我在查找结束循环的条件时遇到了一些麻烦。

Do While values(i) <> 0 Set xcell = Range(Cells(x + 3, 2), Cells(x + 3, 2)) Set ycell = Range(Cells(y + 3, 2), Cells(y + 3, 2)) x = x + 1 y = y + 1 ycell.Formula = "='\\Drcs8570168\shasad\[CR Status.xlsx]Sheet1'!" & xcell.Address values(i + 1) = xcell.Value i = i + 1 Loop 

我试图将每个单元格分配给一个数组的variables,并运行循环,直到开始logging空白单元格。 它告诉我下标超出范围。

你有初始化variablesi和数组的values

循环之前:

 i=0 Redim Preserve valus(i) values(i)=1 'or else we will never enter the loop 

在循环中(循环语句之前的最后一行):

 i = i + 1 Redim Preserve values(i) values(i) = xcell.Value 

但是你甚至不需要数组values (也就是说,如果你不会在代码中的其他任何地方使用它),只需要把最后一个单元格值存储在i

循环之前:

 i = 1 'or we won't enter the loop while i<>0 'starting the loop 

这里是你的循环代码,然后在循环结束之前:

 i = xcell.Value Loop 

编辑:但是,如果您有一个实际的0作为单元格值在列表中,循环将停止在列表的末尾之前,所以你可能想要检查是否你的单元格不包含字符:

假设:

 Dim i as Variant 

最后一个例子中的循环条件也可以是:

 while i<>"" 

这只会在单元格是空的时候停止(=没有内容)

首先,而不是:

 Set xcell = Range(Cells(x + 3, 2), Cells(x + 3, 2)) 

只使用:

 Set xcell = Cells(x + 3, 2) 

但是 ,我怀疑你甚至需要循环。 尝试这样的事情:

 Dim vValues As Variant '// Get the range of cells you want to work with With Range("B3", Cells(Rows.Count, "B").End(xlUp)) '// Add the formula, excel will automatically fill in series .Formula = "='\\Drcs8570168\shasad\[CR Status.xlsx]Sheet1'!A1" '// Build an array from the values vValues = .Value End With 

您可以尝试使用函数来查找包含数据的最后一行,例如:

 Function LastRow(wks As Worksheet) As Long On Error GoTo ErrHandle LastRow = wks.Cells.Find("*", After:=wks.Cells(1, 1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Exit Function ErrHandle: LastRow = 0 End Function