2017-11-05 4 views
0

両方のワークシートの列Aのセルの値が一致していませんが、私は間違った出力とすべてのデータを削除します。適切なバージョンのコードを教えてください。VBAコードは、その行の特定の列の値が別のワークシートで一致しない場合に行を削除します

Lastrowo = ws1.Cells(Rows.Count, "B").End(xlUp).Row 
Lastrowc = ws2.Cells(Rows.Count, "B").End(xlUp).Row 

For x = 1 To Lastrowo 
    For m = 1 To Lastrowc 
    If Workbooks("A.xlsx").Sheets("Sheet1").Cells(x, 1).Value <> 
    Workbooks("B.xlsx").Sheets("Sheet1").Cells(m, 1).Value Then 
     Workbooks("A.xlsx").Sheets("Sheet1").Rows(x).EntireRow.Delete 
     Workbooks("B.xlsx").Sheets("Sheet1").Rows(m).EntireRow.Delete 
    End If 
    Next m 
Next x 
+0

は今 –

+0

なぜあなたは、ブックBのためにも、 'X'変数を使用していけない、Uにそれは明らかですか?本当に2番目のループが必要ですか? –

+0

ループ内で行を削除するようにフラグを立て、フラグ付きの行をすべて削除する別のループを追加してください。あなたが行ったように削除すると、あなたのループが台無しになる – DeanOC

答えて

1

同じコードが、第二のループ

Lastrowo = ws1.Cells(Rows.Count, "B").End(xlUp).Row 
Lastrowc = ws2.Cells(Rows.Count, "B").End(xlUp).Row 

For x = 1 To Lastrowo 
    If Workbooks("A.xlsx").Sheets("Sheet1").Cells(x, 1).Value <> 
    Workbooks("B.xlsx").Sheets("Sheet1").Cells(x, 1).Value Then 
     Workbooks("A.xlsx").Sheets("Sheet1").Rows(x).EntireRow.Delete 
     Workbooks("B.xlsx").Sheets("Sheet1").Rows(x).EntireRow.Delete 
    End If 
Next x 

せずに私は下から上へ行くことによってループを逆に推薦します。
For x = Lastrowo To 1 Step - 1

は、同様のコードを扱う他の記事を参照してください:https://stackoverflow.com/a/47062983/4636801

+0

これを試しましたが、目的の結果が得られませんでした。 –

+0

@yashikavaish 'For'文を' For x = Application.Max(Lastrowo、Lastrowc)To 1 Step -1'に変更すると、結果? (質問に対する私のコメントへのあなたの返答に基づいて、そうしなければ、**何が**あるのかを**説明してください。) – YowE3K

関連する問題