查找每个客户的MIN发票编号并删除所有不匹配的行

时间:2017-03-29 19:17:04

标签: excel vba function

我有一个显示在线销售数据的Excel文件。正如您所料,有多个列,其中两个是客户ID和发票编号。

我的目标是只保留发票编号是每个客户的第一个(或MIN)发票编号的行。

在重复的标签页上,我们需要相同的内容,但仅限于每位客户的第二个发票编号(即第二次购买)。

在旁注中,同一个客户ID和相同的发票编号可以有多行,因为行位于项目级别,因此它可能如下所示:

Row 1: Customer ID = 24; Invoice Number = 1014; Item = Jelly Beans
Row 2: Customer ID = 24; Invoice Number = 1014; Item = Candy Bars

所以,没关系。我们只是想确保从电子表格中删除客户的发票编号未反映其首次购买(或第二次购买的第二次购买)的任何行。

是否有VBA(甚至只是函数)来实现这一目标?即使是在步骤中:例如首先突出显示那些行然后使用另一个VBA来删除突出显示的行?

同样,简而言之,我希望每个客户ID只保留MIN(发票编号)的行。

1 个答案:

答案 0 :(得分:1)

使用COUNTIFS计算客户编号出现的次数。使用锚定到第一个单元格的引用,并在向下拖动时更改。

假设您的客户编号在A栏中,请将其插入B1并复制:

=COUNTIFS($A$1:A1,A1)

相应地过滤1或2。

修改

我没有意识到你只想要第一排。您可以利用MATCH将返回第一个结果并检查它是否等于行号的事实:

=MATCH(A1,A:A,0)=ROW(A1)

请注意,如果您的数据不是从第1行开始,则可能需要略微偏移MATCH。例如,如果您的数据从第3行开始,则需要抵消{{1}结果由2:

MATCH

现在,您可以过滤第一列等于1或2,第二列等于=MATCH(A1,A:A,0)+2=ROW(A1)