Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在excel VBA中仅保留每对的最后一个值?_Excel_Vba - Fatal编程技术网

如何在excel VBA中仅保留每对的最后一个值?

如何在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

以上是一个示例数据系列。。。我只保留每个唯一合同编号的最后一次出现。在上述示例中,我只保留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    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)