Arrays 在Excel VBA中循环遍历数组
我正在努力熟悉VBA中的数组。我想在另一张图纸中复制包含“1”的行,并将它们放在列表的末尾,然后从原始图纸中删除。这是我编写的代码。它不起作用 有人能帮我吗Arrays 在Excel VBA中循环遍历数组,arrays,vba,excel,for-loop,Arrays,Vba,Excel,For Loop,我正在努力熟悉VBA中的数组。我想在另一张图纸中复制包含“1”的行,并将它们放在列表的末尾,然后从原始图纸中删除。这是我编写的代码。它不起作用 有人能帮我吗 Sub array1() Dim Oblast() As Variant Dim dimension1 As Long Dim i As Long Dim dvojPole() As Variant Worksheets("live_position").Activate Oblast = Range("A2", Range("A1")
Sub array1()
Dim Oblast() As Variant
Dim dimension1 As Long
Dim i As Long
Dim dvojPole() As Variant
Worksheets("live_position").Activate
Oblast = Range("A2", Range("A1").End(xlDown))
dimension1 = UBound(Oblast, 1)
ReDim dvojPole(1 To dimension1, 1 To 2)
For i = 1 To dimension1
Set dest = Worksheets("closed").Range("A1").End(xlDown).Offset(1, 0)
If dvojPole(i, 1) = 1 Then
dvojPole(i, 1).EntireRow.Copy Destination:=dest
dvojPole(i, 1).EntireRow.Delete
End If
Next i
End Sub
考虑下面的例子。您没有正确定义数组,也没有对其值进行迭代。这里的关键是引用单元格值位置和实际单元格值,以便在整个范围内迭代
On Error GoTo ErrHandle:
Dim Oblast() As Variant
Dim xlcell As Range, cleanupRng As Range
Dim i As Integer, j As Integer, k As Integer, l As Integer, counter As Integer
' DEFINE DIMENSION OF ARRAY
ReDim Oblast(0 To Range("A2", Range("A1").End(xlDown)).Count)
' INSERT VALUES (CELL LOCATION) IN ARRAY
i = 0
For Each xlcell In Range("A2", Range("A1").End(xlDown))
Oblast(i) = xlcell.Address(False, False, xlA1)
i = i + 1
Next xlcell
j = Worksheets("closed").Range("A1").End(xlDown).Row + 1
' ITERATE ACROSS ARRAY
For k = LBound(Oblast) To UBound(Oblast) - 1
If Range(Oblast(k)) = 1 Then
Range(Oblast(k)).Copy Destination:=Worksheets("closed").Range("A" & j)
Range(Oblast(k)).EntireRow.ClearContents
End If
j = j + 1
Next k
' DELETING CLEARED ROWS
Set cleanupRng = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count)
l = 1
For counter = 1 To ActiveSheet.UsedRange.Rows.Count
If Len(cleanupRng.Cells(l)) = 0 Then
cleanupRng.Cells(l).EntireRow.Delete
Else
l = l + 1
End If
Next counter
Exit Sub
ErrHandle:
MsgBox Err.Number & " - " & Err.Description
Exit Sub
不工作意味着……你试过密码吗?@Ludek“它不起作用:不是一个足够的问题描述。你需要解释你想要你的代码做什么,它现在做什么,以及你在哪里被困在试图修复它。@Chris Neilsen。嗯,我在发表第一篇文章时已经指出了问题所在。我会尽量说得更清楚。因此,这段代码应该将列“A”中值为“1”的所有行从一张工作表“活动位置”复制到另一张工作表“关闭”中,始终位于列表的末尾。然后,应将这些行从原始表“活动位置”中删除。我没有使用“数组”作为正常的“逐行”删除并使用循环处理代码。除此之外,它工作得很好,速度很慢。所以我想把代码和数组放在一起,希望它能运行得更快。谢谢冻糕!看起来不错。我在这里得到调试“如果范围(扁率(k))=1那么”。无法修复它:(.关于“ClearContents”这并不是我想要的。我需要删除这些行。我认为当使用数组时,我不需要像在范围内循环时那样坚持从底部循环。这应该是使用数组的优势之一。而不是使用
ClearContents
使用。删除和否,没有这样的优势:whenev呃,如果要从集合中删除项,则必须向后退。在这种情况下,最好只使用工作表/范围对象,而不是使用数组--实际上,使用数组作为中间步骤是在创建额外的工作。@Ludek,请参阅我编辑的代码。数组的上限必须比使用数组少一个从0元素开始。我还添加了一个清除,删除刚刚清除的行,最好在另一个循环中完成。最后我添加了错误处理。至于最后一项,请原谅,我不知道有哪种编程语言没有指定数组、列表等的始端到终点。如果需要返回其所有内容。@David,我同意。我首先,我要回应的是,使用数组是一个过度劳累的解决方案,简单地引用一个范围是最佳的,但是OP想了解VBA数组。