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