2017-03-06 5 views
1

Zum ersten Mal Poster. Ich arbeite an Code, um mehrere sequenzielle Spalten X-Zeilen nur dann einzufügen, wenn der Wert in Spalte AH größer als Null ist. Es wird jedoch in jeder Zeile anstelle von Zeilen eingefügt, die nur größer als Null sind. HierVBA Einfügen nicht folgen Wenn Anweisung

ist, was ich habe:

Sub Fill_Down_MSP_Info() 

ActiveSheet.Range("E11:AD11").Select 
Selection.Copy 

For Each cell In ActiveSheet.Range("AH11:AH153") 
    If cell.Value > 0 Then 
     Dim example As Range 
     Set example = Range("AH11:AH153") 
     example.Offset(0, -29).Select 
     ActiveSheet.Paste 
    End If 
Next 

End Sub 

Jede Hilfe sehr geschätzt wird. Vielen Dank.

+0

Sie mögen den Wert in der gleichen Zeile einzufügen, oder beim nächsten leeren Slot in Spalte X? –

+1

BTW Ich denke, dass Sie das mit einer einfachen Formel tun könnten. –

+2

Sie kopieren eine ganze Reihe und fügen sie in eine bestimmte Zelle ein, das ist zweifellos nicht das, was Sie beabsichtigen zu tun. Sie sollten dies mit einer Formel tun können, wie @ A.S.H erwähnt, oder Sie können diesen Code ändern, um die Paste-Methode vollständig zu vermeiden. Zumindest sollten Sie nicht den gesamten Datenbereich außerhalb der Schleife kopieren und anschließend den gesamten Datenbereich in einer einzelnen Zelle innerhalb der Schleife einfügen. –

Antwort

0

Wenn Sie entschlossen sind, ebenso wie die Copy/Paste zu halten, können Sie eine Formel nach der Tat verwenden und Zeilen löschen, die Ihre Kriterien nicht erfüllen:

Dim i as Integer 

For i = 153 to 11 Step -1 'Since your paste range is AH11:AH153 
    If Cells(i,34).Value<=0 Then 'AH is 34th column 
     Rows(i).Delete 
    End If 
Next i 

Wenn Sie mehr dynamisch sein sollen, Sie können so etwas wie dies tun:

Dim LR as Long 
Dim i as Integer 

LR = Cells(Sheets("REF").Rows.Count,1).End(xlUp).Row 

For i = LR to 11 Step -1 
    If Cells(i,34)<=0 Then 
     Rows(i).Delete 
    End If 
Next i 

diese Reverse-Schritt wird mit der letzten Zeile der Spalte beginnen und gehen nach hinten bis oben, da nicht um einen Fehler zu verursachen, wenn die letzte Zeile (definiert ändert sich ständig vor es startet die Schleife) nach dem Löschen von Zeilen.