2016-08-03 6 views
0

私のコードで助けが必要です。論理は次のとおりです:もし彼らがすべて "完全"と言うなら、コードの第1行をシート2にコピーします。 "完了"以外の何かがシート3にコピーされていれば、 "完了" 。私はこの領域をデータで点滅させるweb_scraperを持っていて、それをソートする必要があります。 IMAGEは基本的にデータがどのように見えるかを示します。また、完全に(3)スペースがあるので、私は自分のコードに含めました。すべての列に「完了」と表示されている場合はsheet2に移動し、それ以外の場合はsheet3に移動します

enter image description here

Sub test() 

Dim P, lastrow4 
lastrow4 = Sheets("Sheet1").Range("a" & Rows.Count).End(xlUp).Row 
For P = 1 To lastrow4 

'****if complete**** 
'if row one is complete and row 2 is blank place in sheet 2 


If Sheets("sheet1").Cells(P, "A").Value = "COMPLETE " And Sheets("sheet1").Cells(P + 1, "A").Value = "" Then 
Sheets("Sheet1").Cells(P, "A").EntireRow.Copy Destination:=Sheets("sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1) 
End If 


****/if not complete********************* 

'if row 1 isn't complete and is not blank put in sheet 5 


If Sheets("sheet1").Cells(P, "J").Value <> "COMPLETE " And Sheets("sheet1").Cells(P, "J").Value <> "" Then 

Sheets("Sheet1").Cells(P, "J").EntireRow.Copy Destination:=Sheets("sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1) 

End If 

Next P 

End Sub 

答えて

0

あり、以下のいくつかの提案がありますが、ニーズ.offset 2つの値(1,0)のオフセットのようにあなたのコードのいくつかは、不明です。あなたはまた、Rows.countを使用しています。どの行にもそれを適用していますか?ワークシートのすべて? Range( "A1:A2")を使用する必要があります。たとえば、Rows.Count。

Iveがあなたの寸法を修正し、混乱した範囲/セル参照を変更しましたが、これを適切に修正する前に理解しやすいものにする必要があります。

は、私は実際に私は助けを求めていることを変更しwは/シート1 & 2扱っていなかったセル参照

http://www.excel-easy.com/vba/examples/formulaR1C1.html

Sub test() 

Dim P as long, lastrow4 as long 
lastrow4 = Sheets("Sheet1").Range("a" & Rows.Count).End(xlUp).Row 
For P = 1 To lastrow4 
'****if complete**** 
'if row one is complete and row 2 is blank place in sheet 2 

If Sheets("sheet1").Cells(P, 1).Value = "COMPLETE " And Sheets("sheet1").Cells(P + 1, 1).Value = "" Then 
    Sheets("Sheet1").Cells(P, 1).EntireRow.Copy Destination:=Sheets("sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1) 
End If 


'****/if not complete********************* 
'if row 1 isn't complete and is not blank put in sheet 5 


If Sheets("sheet1").Cells(P, "J").Value <> "COMPLETE " And Sheets("sheet1").Cells(P, "J").Value <> "" Then 
    Sheets("Sheet1").Cells(P, "J").EntireRow.Copy Destination:=Sheets("sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1) 
End If 
Next P 

End Sub 
+0

ありがとうございました。私のコードは一般的ではないかもしれないので、私はvbaに新しいです。しかし、私は思考プロセスを説明します。オフセットは2つの値を必要としません.1つしか入力されない場合は、行ごとにオフセットしたいと仮定します。そして、私のrows.countは最後の列を参照しています。つまり、私の実際の最後のセルが変わるので、私はa1:a2と言うことができないので、最後のセルを見つけるためにxlUPを使って最下行から上に移動します。しかし、私はそれを理解した、私は真または偽を返すためにブール変数を使用する必要があった。だから私はそれをsheet1に入れるように設定しました。真のままにしておき、残りの値をチェックする。 sheet2へのfalseコピーとsh1からの削除 – andrew

0

との良好な出発点についてはこちらをご覧ください。これは、シート2から15行下で動作し、真シート5が偽であればシート4に移動します。

Dim P, lastrow4 
P = 15 
lastrow4 = Sheets("Sheet2").Range("J" & Rows.Count).End(xlUp).Row 
Dim check As Boolean 

Sheets("Sheet2").Cells(lastrow4, "J").EntireRow.Copy Destination:=Sheets("sheet4").Range("A" & Rows.Count).End(xlUp).Offset(1) 
       For P = 15 To lastrow4 
        check = Sheets("sheet2").Range("J" & P) = "COMPLETE " 
        If check = False Then 
         Sheets("Sheet2").Cells(P, "J").EntireRow.Copy Destination:=Sheets("sheet5").Range("A" & Rows.Count).End(xlUp).Offset(1) 
         Sheets("sheet4").Range("A" & Rows.Count).End(xlUp).EntireRow.Delete 
        End If 

       Next P 
関連する問題