2016-06-30 4 views
0

以下は、特定のマシンの効率と日付を表す画像です。効率性は毎日ではなくランダムな日付で行われます。この効率は、新しい効率が追加されるまで繰り返されます。したがって、私たちのケースでは、唯一の効率はDay#1,3,10 & 12で行われます。しかし、効率が繰り返される可能性があることがわかります。Day#3 & 12効率は同じです。コマンドを使用できませんDublicatesを削除してくださいExcelでアレイを使用しているときのVBAランタイムエラー9

enter image description here

使命は、効率がデー#1,3,10 & 12に入力されたこれらの日付を選択することで、私はややこれを行うことができた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 

メッセージボックス&数(MyArrayという)は、そのコードのいずれかLBOUND(MyArrayという)の範囲は、(MyArrayという)をUBOUNDするべきループについて最終的なので、エラーが発生し

+2

代わりに、For i = lbound(myArray)to ubound(myArray) 'を実行することをお勧めします。 – BruceWayne

答えて

1

必要な行をターゲットに表し行う、又は0からWorksheetFunction.Count(MyArray)-1まで。

また、削除する予定の行を最終ループで削除することもありません。最初の行が削除されると(例では行4)、他のすべてのセルが1行上に移動しますので、行6の次の削除によって、元の行7を実際に削除します。

ubound(MyArray)からlbound(MyArray)のステップ-1までの最終ループの実行が良い。

関連する問題