我有一张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
答案 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