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

我有一个显示在线销售数据的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(甚至只是function)来实现这一目标? 即使在步骤中:例如先突出显示那些行,然后使用另一个VBA删除突出显示的行?

再次,简而言之,我只希望保留具有每个客户ID的MIN(发票号码)的行。

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

假设你的客户号码在A栏中,插入到B1中并抄下来:

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

相应地过滤1或2。

编辑:

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

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

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

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

现在你可以过滤第一列等于1或2,第二列等于TRUE