在Excel中使用数组时,VBA运行时错误9

下面是代表给定机器的效率与date的图片。 效率不是每天都做,而是随机的。 然后重复这个效率直到增加一个新的效率。 所以在我们的例子中,第1,3,10和12天的效率是独一无二的。但是你可以看到效率可能会重复,所以Day#3和12的效率是一样的。 我们不能使用命令Remove Dublicates

在这里输入图像说明

我们的任务是在第1,3,10和12天select效率input的date。使用VBA我可以做到这一点,但最后会抛出错误9?

Sub AutoEffRemove() Dim rangeToUse As Range, cell1 As Range, i As Integer, RowCount As Integer, MyArray() As Variant Set rangeToUse = Selection For Each cell1 In Selection If cell1.Value = cell1.Offset(-1, 0).Value Then ReDim Preserve MyArray(RowCount) MyArray(RowCount) = cell1.Row RowCount = RowCount + 1 End If Next cell1 For i = 0 To WorksheetFunction.Count(MyArray) Rows(MyArray(i)).EntireRow.Delete 'MsgBox MyArray(i) Next i End Sub 

MsgBox&Count(MyArray)表示该代码是针对所需的行

该错误是由于您的最终For循环应从范围从lbound(MyArray)到ubound(MyArray),或从0到WorksheetFunction.Count(MyArray)-1。

另外,你的最终循环将不会删除你期望删除的行。 一旦第一行被删除(在你的例子中的第四行),所有其他单元格将向上移动一行,所以下一个删除(行6)将实际上删除最初的第7行。

所以你会更好地执行从ubound(MyArray)到lbound(MyArray)步骤-1的最终循环。