【问题标题】:VBA Look for Duplicate, then assesses another cells valueVBA 查找重复项,然后评估另一个单元格值
【发布时间】:2016-10-08 02:53:53
【问题描述】:

我最初在下面问了一个问题。

基本上我希望 VBA 查看 L:L 列。如果单元格=程序,并且下面的单元格不等于车床,我希望删除上面的行。如果单元格不相等,则程序继续查找,直到数据结束。

意识到我需要以不同的方式看待数据,因为我丢失了需要保留的行。

新的逻辑,我觉得还是会用到一些旧的程序,但是 它需要使用另一列进行排序。我需要 VBA 来查看 E:E 列。如果下面行中的单元格是该单元格的副本 上面,然后查看该行中的 L 列以查看单元格是否显示 程序。如果是这样,下面的单元格应该是车床。如果不是车床删除 程序行,如果是车床,则保留两行。如果 E 列中的单元格 不重复,继续找。前任。如果E5=E6,如果没有继续 看着。如果是,请查看 L5 是否显示 Program。如果是这样,请查看 L6 车床。如果不删除ROW5。

这是我收到的回答了我认为仍然会被使用的第一个问题

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

【问题讨论】:

  • 请注意,您正在迭代整个工作表,即超过 100 万次迭代。像您一样一次删除一行时,应该向后循环。
  • 您的描述有点不清楚 - 您谈论的是“下面的单元格”,但下面不清楚 what... 这将有助于澄清每个参考文献的相关性到
  • 我下面的例子是 if E5=E6

标签: vba excel


【解决方案1】:

应该这样做

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

【讨论】:

  • 这可以按我的需要发挥作用,尽管我被要求提供更多要求,这将稍微改变我的逻辑。谢谢你,我可能还有另一个问题,如果我想不通,我会发一个新帖子。
【解决方案2】:

删除时最好从最后一个迭代到第一个。如果阻止您跳过行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2021-01-06
    • 1970-01-01
    相关资源
    最近更新 更多