現在下記のコードを組んでいます。
やりたい事は、sheet1~3で背景色の赤いセルと、
そのセルの上方の最初の空白セルの下3行をsheet4にコピペする。
【下記コードで実現出来ていないこと】
1.背景色が赤いセルとそのスグ上の3行をコピペしてしまう。
2.同じシートに背景色が赤いセルが複数あっても、1つしかコピペしない。
3.sheet4のコピペ先をA3、A13、A23と仮に指定しているが、
sheet1のコピペ内容に1行空けて、sheet2のコピペ内容、
また1行空けて、sheet3のコピペ内容というセル指定にしたい。
以上、よろしくお願い致します。
Sub Test()
Dim i As Long, r As Range
With Worksheets("sheet1")
For i = 1 To .Range("A65536").End(xlUp).Row
If .Range("A" & i).Interior.ColorIndex = 3 Then
Set r = .Range("A" & i).EntireRow
Set r = Union(r, r.End(xlUp).Resize(3).EntireRow)
End If
Next i
End With
If Not r Is Nothing Then r.Copy
Sheets("Sheet4").Select
Range("A3").Select
ActiveSheet.Paste
With Worksheets("sheet2")
For i = 1 To .Range("A65536").End(xlUp).Row
If .Range("A" & i).Interior.ColorIndex = 3 Then
Set r = .Range("A" & i).EntireRow
Set r = Union(r, r.End(xlUp).Resize(3).EntireRow)
End If
Next i
End With
If Not r Is Nothing Then r.Copy
Sheets("Sheet4").Select
Range("A13").Select
ActiveSheet.Paste
With Worksheets("Sheet3")
For i = 1 To .Range("A65536").End(xlUp).Row
If .Range("A" & i).Interior.ColorIndex = 3 Then
Set r = .Range("A" & i).EntireRow
Set r = Union(r, r.End(xlUp).Resize(3).EntireRow)
End If
Next i
End With
If Not r Is Nothing Then r.Copy
Sheets("sheet4").Select
Range("A23").Select
ActiveSheet.Paste
End Sub
#1です。
まだ違うかも知れませんけど、参考に。
Sub Test1()
Dim i As Long, r As Range, myArray
myArray = Array("Sheet1", "Sheet2", "Sheet3")
For cnt = 0 To 2
With Worksheets(myArray(cnt))
For i = 1 To .Range("A65536").End(xlUp).Row
If .Range("A" & i).Interior.ColorIndex = 3 Then
If r Is Nothing Then
Set r = .Range("A" & i).EntireRow
Else
Set r = Union(r, .Range("A" & i).EntireRow)
End If
End If
Next i
If Not r Is Nothing Then
Set r = Union(r, r.End(xlUp).Resize(3).EntireRow)
r.Copy Destination:=Worksheets("Sheet4"). _
Range("A65536").End(xlUp).Offset(2, 0).EntireRow
Set r = Nothing
End If
End With
Next cnt
End Sub
前の質問で補足に答える前に閉じられたので、ここに書きます。
http://okwave.jp/qa3452416.html
先の質問での説明ですが下記の誤りです。
「A列を1行目から調べて、『最後に残った背景が赤いセル(ColorIndex = 3)を含む行』および、その上方の空白セルから下3行がコピー状態になります」
ループさせているので途中行も判定してます。
従ってコピーしている部分のコード位置をループ内に変えて、コピー後に変数 r をいったんリセットすれば希望動作に近いと思います。
Sub Test()
Dim i As Long, r As Range
With Worksheets("Sheet1")
For i = 1 To .Range("A65536").End(xlUp).Row
If .Range("A" & i).Interior.ColorIndex = 3 Then
Set r = .Range("A" & i).EntireRow
Set r = Union(r, r.End(xlUp).Resize(3).EntireRow)
End If
If Not r Is Nothing Then
r.Copy Destination:=Worksheets("Sheet4"). _
Range("A65536").End(xlUp).Offset(2, 0).EntireRow
Set r = Nothing
End If
Next i
End With
End Sub
お礼
本当に色々と考えてくださって、ありがとうございました。 上記の内容を書いてみて、キレイにマクロが動きました。 私の持っている元データのセルに何らかの 設定がされているようで、そちらでは動かないのですが、 それは別問題です。自分で調べてみます。 ありがとうございました!