2016-07-20 2 views
1

Я пишу код в VBA, который проходит через каждую строку для нескольких столбцов и находит разницу между каждыми двумя строками и хранилищами, которые имеют значение в массиве. Я добавил оператор if в цикле for, чтобы избежать пустых ячеек, включенных в операцию, и работает для первых пяти столбцов, но не для шестого.Условное заявление не работает должным образом в VBA Excel

Dim Datarray As Variant 
Dim LR As Long, LR1 As Long 
Dim p As Integer, i As Integer 
LR1=LR-1 
ReDim R(LR1) As Variant 

For i = 1 To DateTime_Column 

LR = Cells(Rows.Count, i).End(xlUp).Row 
Datarray = Range(Cells(1, i), Cells(LR, i)) 

For p = 2 To LR1 

    If Datarray(p, 1) And Datarray(p + 1, 1) <> Empty Then 
    R(p) = Abs(Datarray(p + 1, 1) - Datarray(p, 1)) 
    End If 

Next p 

Rave = WorksheetFunction.Average(R)  ***Error occurs here because R is empty*** 

Next i 

Кто-нибудь видит что-то не так с тем, как написано мое заявление if? Код, кажется, считает, что ячейки в шестом столбце пусты, когда они не являются. Я проверил Datarray, и в каждом месте есть ценности.

+0

Не следует ли рассчитывать 'LR' и' LR1' * перед * операцией 'ReDim'? Прямо сейчас кажется, что 'R' имеет размерность до нулевых элементов. Кроме того, добавление оператора «Option Explicit» в начало вашего кода может позволить компилятору отмечать дополнительные проблемы. – xidgel

ответ

1

Ваше заявление If выглядит неправильно. Если вам нужно проверить, соблюдены ли два условия, используйте:

If Datarray(p, 1) <> Empty And Datarray(p + 1, 1) <> Empty 
Смежные вопросы