繁体   English   中英

Excel VBA-如果来自不同表的值相等,则删除行

[英]Excel VBA - Delete the row if values from different tables are equal

我有一个包含以下内容的示例表

工作表1

User Name Age 

工作表2

User Name Age

我想删除Worksheet2行,如果用户一样1 用户

我已经编写了以下VBA程序,但始终收到“需要对象”错误,我不知道为什么会这样

    Sub columnCompare()
Dim sh1 As Worksheet, sh2 As Worksheet, r1 As Range, r2 As Range
  Set sh1 = Worksheets("Users SBC")
  Set sh2 = Worksheets("Users JDF")
  Set r1 = sh1.Range("A2")
  Set r2 = sh2.Range("A2")
  While r1 <> ""
    Set r2 = sh2.Range("A2")
    While r2 <> ""
        Set r2 = r2.Offset(1, 0)
        If r1 = r2 Then r2.EntireRow.Delete
    Wend
    Set r1 = r1.Offset(1, 0)
  Wend
End Sub

我对您的代码进行了一些更改。 正如我在评论中所说,删除r2所在的行将清除它。

Sub columnCompare()
Dim sh1 As Worksheet, sh2 As Worksheet, r1 As Range, r2 As Range, i As Integer
  Set sh1 = Worksheets("XX")
  Set sh2 = Worksheets("YY")
  Set r1 = sh1.Range("A2")
  Set r2 = sh2.Range("A2")
  While r1 <> ""
   Set r2 = sh2.Range("A2")
    While r2 <> ""
        If r1 = r2 Then r2.Value = "delete"
        Set r2 = r2.Offset(1, 0)
    Wend
   Set r1 = r1.Offset(1, 0)
 Wend
 For i = r2.Row To 2 Step -1
    If sh2.Range("A" & i).Value = "delete" Then sh2.Rows(i).EntireRow.Delete
 Next i
End Sub

一种替代方法是先进行偏移,然后删除前一行(具有负偏移)。 在另一个答案的结尾将您保存为循环。

While r1 <> ""
  Set r2 = sh2.Range("A2")
  While r2 <> ""
    If r1 = r2 Then
      Set r2 = r2.Offset(1, 0)
      r2.Offset(-1, 0).EntireRow.Delete
    Else
      Set r2 = r2.Offset(1, 0)
    End If
  Wend
  Set r1 = r1.Offset(1, 0)
Wend

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM