2017-08-03 14 views
0

私はConsultaと呼ばれるこのシートを持っています。私は列Kの値を変更するたびに、空の場合は範囲​​Eの色をKまたは緑に変更します。異なる範囲にコピーするVBA

また、行が緑色の場合は、その行をE-mailというシートにコピーします。私は実際に対応する範囲の代わりに別の範囲にコピーしたい

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

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 

私の問題は、以下の行である:これは私がこれまで試したし、それがどのような作品ですシートE-mail(たとえば、最初の一致がE3:K3の場合はA2:K2に、2番目の一致がE34:K34の場合はA3:K3にコピーして行きます)。

私は別のループを使用しようとしましたが、Excelが狂ったので、私は間違っていたと思います。

ご意見をお寄せください。

答えて

3

宛先には左上隅のセルのみが必要です。最後に使用されたセルをボトムアップし、行をオフセットします。

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

これを塗りつぶし色を適用する行の上に置くか、塗りつぶし色をコピーすることもできます。

+0

これだけです!ありがとう、私は完全に 'オフセット'を忘れてしまった。そしてあなたはその色について正しいです。 – paulinhax

+0

私はこれが色が枯れたときに私の「クリア」を台無しにしてしまったが、私はそれを修正しようとします。 – paulinhax

関連する問題