Vba 检查两列中的值是否匹配&;Excel在另一行通过特定条件时删除该行

Vba 检查两列中的值是否匹配&;Excel在另一行通过特定条件时删除该行,vba,excel,excel-formula,Vba,Excel,Excel Formula,如果有人能在这方面帮助我,我将不胜感激。我一直在寻找任何相关的问题,但没有结果 我不确定这是否可以通过VBA实现(如果可以,更好),尽管我目前正在研究公式(Match,VLookup),但仍然很困难 我有三组列。(A、B、C列) 目标是删除包含B列(发票)和C列(付款)上相同值的行,但前提是A列(日期)中的数据在两列中找到匹配日期后的3天内。应删除这些条件中的两行。 可考虑2015年10月1日+3天=2015年10月4日,否则不应删除行 预期的结果将是 DATE INVOI

如果有人能在这方面帮助我,我将不胜感激。我一直在寻找任何相关的问题,但没有结果

我不确定这是否可以通过VBA实现(如果可以,更好),尽管我目前正在研究公式(Match,VLookup),但仍然很困难

我有三组列。(A、B、C列)

目标是删除包含B列(发票)和C列(付款)上相同值的行,但前提是A列(日期)中的数据在两列中找到匹配日期后的3天内。应删除这些条件中的两行。 可考虑2015年10月1日+3天=2015年10月4日,否则不应删除行

预期的结果将是

DATE            INVOICE       PAYMENT*
1/10/2015        131.08
2/10/2015                      1232.4*

先谢谢你

假设只有两行相等的行必须删除,则创建宏。试试看

Sub delrow()
Dim i As Long, j As Long
Columns("A:C").Sort key1:=Range("A2"), _
      order1:=xlAscending, Header:=xlYes
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 2) = Cells(j, 3) And Cells(i, 1) < Cells(j, 1) And Cells(i, 1) + 3 >= Cells(j, 1) Then
        Rows(i).ClearContents
        Rows(j).ClearContents
    End If
Next j
Next i
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
    If Cells(i, 1) = "" Then
        Rows(i).Delete
    End If
Next i
End Sub
Sub-delrow()
我和我一样长,我和我一样长
列(“A:C”)。排序键1:=范围(“A2”)_
订单1:=xl升序,标题:=xlYes
对于i=2到单元格(Rows.Count,1)。结束(xlUp)。行
对于j=2到单元格(Rows.Count,1)。结束(xlUp)。行
如果单元格(i,2)=单元格(j,3)和单元格(i,1)<单元格(j,1)和单元格(i,1)+3>=单元格(j,1),则
第(i)行。清除内容
行(j).ClearContents
如果结束
下一个j
接下来我
对于i=单元格(Rows.Count,1)。结束(xlUp)。行到2步骤-1
如果单元格(i,1)=“那么
第(i)行。删除
如果结束
接下来我
端接头

公式无法删除行,除非您在“帮助者”列中使用它来标识要删除的行,然后在“帮助者”列上手动自动筛选并手动删除行。放弃公式解决方案,构建一个VBA子过程,该子过程在字典中收集唯一的行标识符,然后使用字典键自动筛选并随后删除行。Hi Jeeped,感谢您的响应。这实际上是我最初计划使用这些公式作为“标识符/助手”来删除行。我知道这在VBA中是可能的,但我是VBA的初学者,不能自己创建。我一直在网上搜索任何类似的案例,但都找不到。如果你能帮我创造这个,那我将不胜感激!谢谢:)你至少应该自己尝试一下,在问题中添加代码,并在代码中提出特定问题。Stack Overflow是一个基于问答的网站,无法教您如何编写VBA代码。因此,你可能会在一个有人可以指导你的论坛上找到合适的帮助。读书可能也会有帮助。非常感谢你,高谭!感谢您的回复:)效果非常好:)很高兴听到!!我对答案做了一个小改动,以便正确地排序日期。使用更新的答案。如果你觉得这有用,请投票
Sub delrow()
Dim i As Long, j As Long
Columns("A:C").Sort key1:=Range("A2"), _
      order1:=xlAscending, Header:=xlYes
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 2) = Cells(j, 3) And Cells(i, 1) < Cells(j, 1) And Cells(i, 1) + 3 >= Cells(j, 1) Then
        Rows(i).ClearContents
        Rows(j).ClearContents
    End If
Next j
Next i
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
    If Cells(i, 1) = "" Then
        Rows(i).Delete
    End If
Next i
End Sub