2017-03-06 76 views
1

第一次张贴海报。我正在处理代码,以便只有在列AH中的值大于零时才将多个连续列粘贴到X行。但是,它将粘贴在每行中,而不是仅大于零的行。VBA粘贴不关注如果声明

以下是我有:

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 

任何帮助表示赞赏。谢谢。

+0

您想要将该值粘贴在同一行中,还是列X中的下一个空插槽? –

+1

顺便说一句我认为你可以用一个简单的公式来做到这一点。 –

+2

您正在复制整个范围并将其粘贴到特定的单元格中,这无疑不是您打算执行的操作。你应该可以用公式来做到这一点,就像@ A.S.H提到的那样,或者你可以修改这个代码来完全避免使用“粘贴”方法。至少,您不应该复制循环外的全部数据范围,并且随后将全部范围的数据粘贴到循环内的单个单元格中。 –

回答

0

如果您有意保持复制/粘贴的是,你可以在事后使用公式和删除行不符合您的标准:如果您想更动态

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 

,你可以做一些与此类似:

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 

此反向步骤将开始列的最后一排和倒退直到顶部,以不引起一个错误,当最后一行不断变化的(之前定义它会在删除行之后启动循环)。