如何在excel VBA中仅保留每对的最后一个值?
以上是一个示例数据系列。。。我只保留每个唯一合同编号的最后一次出现。在上述示例中,我只保留D/023/09 17.85、D/026/09 0和D/038/11 20.6。所以应该只有3个唯一的值。最有效的方法是什么?这里不需要vba。。。 添加列C并将其命名为“检查”。在单元格C2中插入以下公式:如何在excel VBA中仅保留每对的最后一个值?,excel,vba,Excel,Vba,以上是一个示例数据系列。。。我只保留每个唯一合同编号的最后一次出现。在上述示例中,我只保留D/023/09 17.85、D/026/09 0和D/038/11 20.6。所以应该只有3个唯一的值。最有效的方法是什么?这里不需要vba。。。 添加列C并将其命名为“检查”。在单元格C2中插入以下公式: Contract No Price D/019/09 17.85 D/019/09 17.85 D/019/09 17.85 D/019/09 17.85 D/023/09
Contract No Price
D/019/09 17.85
D/019/09 17.85
D/019/09 17.85
D/019/09 17.85
D/023/09 17.85
D/023/09 17.85
D/026/09 0
D/026/09 0
D/038/11 20.6
D/038/11 20.6
D/038/11 20.6
=if(A2A3,1,0)
然后复制这个公式直到你的数据范围结束。
下一步为C列中的0应用筛选器。删除所有行,您就拥有了它
您的工作表:
您的工作表如下:
请尝试下面的代码。使用VBA
=if(A2<>A3,1,0)
子样本()
变暗最后一行一样长,j一样长
lastRow=范围(“A65000”)。结束(xlUp)。行
j=1
对于i=最后一行到2步骤-1
如果单元格(i,1)。值单元格(i+1,1),则
细胞(i,1)。复制细胞(j,3)
单元格(i,1)。偏移量(0,1)。复制单元格(j,4)
j=j+1
如果结束
下一个
端接头
除了我的评论之外,还有另一种方法,不需要对数据进行排序。参见D/019/09
Sub sample()
Dim lastRow As Long, j As Long
lastRow = Range("A65000").End(xlUp).Row
j = 1
For i = lastRow To 2 Step -1
If Cells(i, 1).Value <> Cells(i + 1, 1) Then
Cells(i, 1).Copy Cells(j, 3)
Cells(i, 1).Offset(0, 1).Copy Cells(j, 4)
j = j + 1
End If
Next
End Sub
请参阅此链接。。。您必须修改公式以满足您的需要。这样,即使您的数据没有排序,它也可以工作。Excel>2003具有删除重复数据的内置功能。2007年之前,您可以按合同编号列对数据进行排序,并使用eye或简单公式删除重复项。如果其中一个建议答案解决了您的问题,那么您应该“接受”它,以利于未来的读者(并给花时间帮助您的人一些声誉分数)。适当注明:@SiddharthRout
=IF(COUNTIF($A2:$A$13,A2)>1,0,B2)