2016-04-24 16 views
0

Программа, над которой я работаю, включает чтение и определение разницы между i - (i + 1) и i- (i-1) от excel.Как удалить часть массива?

Если разница превышает 4, программа удаляет строку в i.

Программа работает с первой попытки. Внезапно в нем говорится, что «вы не можете изменить часть массива».

Option Explicit 

Sub Data_Delet() 

    Dim a As Double, b As Double, c As Double, i As Double 
    Dim rkill As Range 
    ' a,b, and c are used as steps in order to proceed to the next data points 
    a = 18 
    b = 0 
    c = 0 

    With ThisWorkbook.Worksheets("Sheet1") 

     ' The second do loop delete data points that does not follow the requirements 
     Do 
     If Abs(.Cells(a - 1, 2) - .Cells(a, 2)) > 4 And Abs(.Cells(a, 2) - .Cells(a + 1, 2)) > 4 Then 
      If rkill Is Nothing Then 
       Set rkill = Rows(a) 
      Else 
       Set rkill = Union(rkill, Rows(a)) 
      End If 
     End If 
     a = a + 1 
     Loop Until .Cells(a, 2).Value = "" 
     If Not rkill Is Nothing Then rkill.EntireRow.Delete 
    ' The third Do loop determines the number of data points that are still present after deleting the data points 
     Do 
     i = .Cells(17 + c, 1) 
     c = c + 1 
    Loop Until .Cells(17 + c, 1).Value = "" 

    ' The if statment determine whether or not the number data points from before are the same after deletion process 
    If b = c Then 
    .Cells(2, 5) = "N" 
    Else 
    .Cells(2, 5) = "Y" 
    End If 

     ' c is the number of data point after deletion 
    .Cells(12, 5) = c 

    End With 

End Sub 

ответ

2

Ошибка «Вы не можете изменить часть массива» на rkill.EntireRow.Delete означает, что строка вы хотите удалить это пересекающиеся диапазон ссылки в формуле массива (формула, с фигурными скобками).

Excel не позволяет этого. Один из способов заключается в удалении формулы (-ов) оскорбительного массива в начале вашего кода и переопределении его/их снова в конце вашего кода. Или найти решение для превращения этих формул массива в обычные формулы.

+0

Большое спасибо – Rain