vba数组元素删除

时间:2016-06-29 13:25:54

标签: excel vba excel-vba

j = LBound(arrayTime)
Do Until j = UBound(arrayTime)
    j = j + 1
    b = b + 1
    cnc = b + r
    MsgBox cnc
        If cnc > 7 Then
            b = 0
            r = 0
            cnc = b + r
        End If
    numMins = Sheet5.Cells(cnc + 3, 2) - arrayTime(j)
    If numMins < 0 Then
        g = g + 1
        ReArrangeArray arrayTime, j
        'ReDim Preserve arrayTime(numrows - 1 + g)
        'arrayTime(numrows - 1 + g) = arrayTime(j)
        'MsgBox (arrayTime(numrows - 1 + g))
    Else
        Sheet5.Cells(cnc + 3, 2) = numMins
    End If
Loop

如果if语句为true,我希望能够将数组值放在数组的末尾,并从当前位置删除该值。代码是,它只是将它添加到最后并将数组的大小从12增加到13.如何使数组保持大小为12并仍然将值放在数组的末尾,然后将其从它原来的位置?我不想触及前面的数组值。只想获取该值并将其移至最后。 例如 阵列(1,2,3,4,5) 如果声明 j在第三个循环上。 阵列(J)= 3 结束数组应该是 阵列(1,2,4,5,3)

1 个答案:

答案 0 :(得分:1)

您可以像这样使用辅助Sub:

Sub ReArrangeArray(inputArray as Variant, indexToSwap as long)
    Dim I As Long
    Dim tempVal As Variant

    If indexToSwap >= LBound(inputArray) And indexToSwap < UBound(inputArray)  Then
        tempVal = inputArray(indexToSwap)
        For I = indexToSwap To UBound(inputArray) - 1
            inputArray(i) = inputArray(i + 1)
        Next I
        InputArray(UBound(inputArray))  = tempVal 
    End If
End Sub

由您的主要Sub调用如下:

ReArrangeArray arrayTime, j