Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Excel VBA中循环遍历数组_Arrays_Vba_Excel_For Loop - Fatal编程技术网

Arrays 在Excel VBA中循环遍历数组

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")

我正在努力熟悉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").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数组。