使用excel vba

时间:2015-10-29 23:24:57

标签: excel-vba vba excel

我有一张excel表(比如表A),其中包含数据,组织成由空行分隔的分组,并按N列中的公共条目分组。在每个分组中,我需要检查另一个excel表(让表单B)在不同的工作簿中查看表A的A列中的任何条目是否匹配表B的列C中的任何条目。如果任何列C条目与列A中的条目匹配第一张纸的单一分组,我对该分组没有任何作用。如果没有匹配项,我需要删除整个分组。以下是我的尝试,但我主要是对1.如何删除分组以及2.如何正确调用每个工作表/列感到困惑。

Sub DeleteAdjacent()
    Dim wb1 As Workbook, Dim wb2 As Workbook, sh1 As Worksheet, sh2 As Worksheet
    Dim lastrow1 As Long, Dim lastrow2 As Long, Dim i As Long, Dim j As Long
    Set wb1 = Workbooks("Workbook1.xlsx")
    Set wb2 = Workbooks("Workbook2.xlsx")
    Set sh2 = wb2.Sheets(“Sheet B”)
    Set sh1 = wb1.Sheets("Sheet A")
    lastrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row
    lastrow2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row
    For j = lastrow1 To 1 Step -1
        cell = "N" & j
        cell1 = "N" & (j - 1)
        Do While sh1.Cells(j, cell).Value = sh1.Cells(j, cell1).Value
            For i = lastrow2 To 1 Step -1
                cell2 = "C" & i
                cell3 = "A" & j
                If sh1.Cells(j, cell3).Value = sh2.Cells(i, cell2).Value Then
                    Do While sh1.Cells(j, cell).Value = sh1.Cells(j, cell1).Value
                        sh1.Range(j, cell).EntireRow.Delete
                    Loop
                End If
            Next i
        Loop
    Next j
End Sub

编辑:更仔细地看待我的尝试,它实际上与我想做的事情正好相反。我试图在匹配时删除整个分组,而实际上我想要完全相反。我认为下面的部分应该改变。

If sh1.Cells(j, cell3).Value = sh2.Cells(i, cell2).Value Then
    Do While sh1.Cells(j, cell).Value = sh1.Cells(j, cell1).Value
        sh1.Range.Cells(j, cell).EntireRow.Delete
    Loop
End If

我试图纠正这个问题可能太简单了?

If sh1.Cells(j, cell3).Value <> sh2.Cells(i, cell2).Value Then
    Do While sh1.Cells(j, cell).Value = sh1.Cells(j, cell1).Value
        sh1.Range.Cells(j, cell).EntireRow.Delete
    Loop
End If

1 个答案:

答案 0 :(得分:1)

我认为如果我正在攻击这个问题,我不会将A与C进行比较,并在同一过程中进行组循环检查。如果您首先为组创建值的映射,则可能更容易理解问题。假设组1,3和5中存在值10,那么您可以检查10并立即从您将来的检查中删除3组。 <script> $(document).ready(function start() { $("#searchBox").autocomplete({ source: function(req, responseFn) { console.log(req); } }); }); </script> <paper-input id="searchBox"/></paper-input> 的{​​{1}}会为您提供良好的服务,因为Collection的查询速度非常快,您无需担心其存储的项目数量。

如果您还为每个组收集了Collections,那么这将是一个消除匹配组的简单过程,然后在一次点击中删除所有剩余的key

下面的代码应该为您做到(但与任何行删除代码一样,我建议您先备份原始数据!):

Ranges