vba要复制到不同的范围

时间:2017-08-03 15:48:51

标签: excel vba excel-vba

我有一张名为Consulta的表格,每当我更改列K上的值时,它会将范围E:K的颜色更改为绿色或白色(如果它为空)。

如果行为绿色,我还想将该行复制到名为E-mail的工作表中。这是我迄今为止尝试过的,并且有效:

Sub ChangeColor()
Dim ws As Worksheet, ws1 As Worksheet, i As Long, lastrow As Long

Set ws = Sheets("Consulta")
Set ws1 = Sheets("E-mail")

lastrow = ws.Cells(Rows.Count, "E").End(xlUp).Row


For i = 5 To lastrow
If ws.Range("K" & i) <> "" Then
    ws.Range("E" & i & ":K" & i).Interior.ColorIndex = 43
    ws.Range("E" & i & ":K" & i).Copy ws1.Range("A" & i & ":G" & i)
Else
    ws.Range("E" & i & ":K" & i).Interior.ColorIndex = 2
End If
Next

If ws.Range("E" & i & ":K" & i).Interior.ColorIndex = 2 Then
    ws1.Range("A" & i & ":G" & i).Clear
End If
End Sub

我的问题在于以下这一行:

ws.Range("E" & i & ":K" & i).Copy ws1.Range("A" & i & ":G" & i)

我实际上想要复制到不同的范围而不是工作表E-mail中的相应范围(例如,如果第一个匹配是E3:K3我要复制到A2:K2。如果第二个匹配是E34:K34我想把它复制到A3:K3,所以它去了)。

我尝试使用另一个循环,但我的Excel变得疯狂所以我认为我做错了。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:3)

您只需要左上角的单元格作为目的地。从下往上查看最后使用过的单元格并向下偏移一行。

with ws1
    ws.Range("E" & i & ":K" & i).Copy .cells(.rows.count, "A").end(xlup).offset(1, 0)
end with

您可能希望将其置于应用填充颜色的线上方,或者您也将复制填充颜色。