2016-07-20 7 views
1

Ich schreibe einen Code in VBA, der jede Zeile für mehrere Spalten durchläuft und den Unterschied zwischen zwei Zeilen findet und diesen Wert in einem Array speichert. Ich habe eine if-Anweisung in der for-Schleife hinzugefügt, um zu vermeiden, dass leere Zellen in die Operation eingeschlossen werden, und sie funktioniert für die ersten fünf Spalten, aber nicht für die sechste.Bedingte Anweisung funktioniert nicht ordnungsgemäß in 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 

Hat jemand etwas falsch mit der Art, wie meine if-Anweisung geschrieben wird? Der Code scheint zu denken, dass die Zellen in der sechsten Spalte leer sind, wenn sie nicht sind. Ich habe das Datarray überprüft und jeder Spot hat Werte.

+0

Sollten Sie nicht 'LR' und' LR1' * vor * der 'ReDim'-Anweisung berechnen? Gerade jetzt scheint es, dass "R" auf Null Elemente dimensioniert ist. Das Hinzufügen einer Option Explicit-Anweisung an den Anfang des Codes kann dem Compiler außerdem ermöglichen, zusätzliche Probleme zu kennzeichnen. – xidgel

Antwort

1

Ihre If Anweisung sieht falsch aus. Wenn Sie prüfen müssen, ob zwei Bedingungen erfüllt sind, verwenden Sie:

If Datarray(p, 1) <> Empty And Datarray(p + 1, 1) <> Empty 
Verwandte Themen