2016-10-07 7 views
0

私は最初以下の質問をしました。VBA Duplicateを探し、別のセルの値を評価する

基本的に私は、VBAが列L:Lを見ることを望んでいます。セル=プログラムで、下のセルが旋盤と等しくない場合は、上の行を削除します。セルがプログラムと等しくない場合は、データの終わりまで見続けます。

実現私は滞在する必要がある行を失っていたので、私は異なるデータを見る必要がありました。

私はまだ古いプログラムのいくつかを使用しますが、 それは別の列を使用してソートすることが必要になると思う新しいロジックは、。 列E:Eを見るにはVBAが必要です。下の行のセルが上記の セルの複製である場合は、その行の列Lを見て、セルに プログラムが表示されているかどうかを確認します。もしそうなら、下のセルはLatheでなければなりません。旋盤でない場合は プログラム行を削除し、旋盤であれば両方の行を残します。カラムE のセルが重複していない場合は、探し続ける。 EX。 E5=E6の場合は、続行しないでください を探しています。はいの場合L5を見て、それがプログラムであるかどうかを確認します。もしそうなら、旋盤用のL6 を見てください。 ROW5を削除しない場合

これI私はそれは私がまだ

Dim rngCheck as Range 
Dim rngCell as Range 

Set rngCheck = Range("L1", "L" & Rows.Count - 1) 

For each rngCell in rngCheck 
    If rngCell.value = "Program" And rngCell.offset(1,0).value <> "lathe" then 
     rngCell.offset(-1,0).EntireRow.Delete 
    End if 
Next rngCell 
+0

1つのメモでは、シート全体を反復しています。これは100万回を超える繰り返しです。あなたのように一度に1つずつ行を削除すると、後ろにループする必要があります。 –

+0

あなたの説明は少し不明です - あなたは "下のセル"について話しますが、下にはっきりしていない*何* ...それは –

+0

の相対的なものとすべての参照を明確にするのに役立ちます。E5 = E6の場合の私の例は –

答えて

0

それを削除すると、最後の反復処理するのが最善である場合にはこれはそれを

For i = ThisWorksheet.Cells.SpecialCells(xlCellTypeLastCell).Row to 2 step -1 
    ' that row do you mean the duplicate or the original (I am using original) 
    If ThisWorksheet.Cells(i, 5) = ThisWorksheet.Cells(i-1, 5) and _   
     ThisWorksheet.Cells(i-1, 12) = "Program" and ThisWorksheet.Cells(i, 12) <> "Lathe" 
     ThisWorksheet.Rows(i-1).EntireRow.Delete 
    End If 
Next i 
+0

これは私が必要としていたように機能しましたが、私のロジックを少し変えようとするいくつかの要件が求められました。ありがとう、私はおそらく別の質問を私はそれを把握することができない場合の新しい投稿をするだろう。 –

0

を行う必要がありますが慣れるだろうと思いtehの最初の質問に答え受けたものを最初に。行をスキップしないようにするには

Sub RemoveRows() 
    Dim x As Long 

    With Worksheets("Sheet1") 

     For x = .Range("E" & .Rows.Count).End(xlUp).Row To 2 Step -1 
      If .Cells(x, "E").Value = .Cells(x - 1, "E").Value And Cells(x - 1, "L").Value = "Program" Then 
       .Rows(x).Delete 
      End If 
     Next 

    End With 

End Sub 
関連する問題