Excel 查找每个客户的最小发票号,并删除所有不符合';不匹配
我有一个显示在线销售数据的Excel文件。正如您所期望的,有多个列,其中两个是客户ID和发票号 我的目标是只保留发票号为每个客户的第一个(或最小)发票号的行 在重复选项卡上,我们需要相同的内容,但仅针对每个客户的第二个发票号(即第二次购买) 在旁注中,同一客户ID和同一发票号可以有多行,因为这些行位于项目级别,因此可能如下所示:Excel 查找每个客户的最小发票号,并删除所有不符合';不匹配,excel,vba,function,Excel,Vba,Function,我有一个显示在线销售数据的Excel文件。正如您所期望的,有多个列,其中两个是客户ID和发票号 我的目标是只保留发票号为每个客户的第一个(或最小)发票号的行 在重复选项卡上,我们需要相同的内容,但仅针对每个客户的第二个发票号(即第二次购买) 在旁注中,同一客户ID和同一发票号可以有多行,因为这些行位于项目级别,因此可能如下所示: Row 1: Customer ID = 24; Invoice Number = 1014; Item = Jelly Beans Row 2: Customer I
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(发票号)行。使用COUNTIFS来计算客户号出现的次数。使用定位到第一个单元格并在向下拖动时更改的参照 假设您的客户编号在A列中,将其插入B1并向下复制:
=COUNTIFS($A$1:A1,A1)
相应地在1或2上过滤
编辑:
我不知道你只想要第一排。您可以利用MATCH将返回第一个结果的事实,并检查它是否等于行号:
=MATCH(A1,A:A,0)=ROW(A1)
请注意,如果数据不是从第1行开始,则可能需要稍微偏移匹配。例如,如果数据从第3行开始,则需要将匹配结果偏移2:
=MATCH(A1,A:A,0)+2=ROW(A1)
现在您可以对第一列进行过滤,第一列等于1或2,第二列等于TRUE
是的,当然有“一个VBA(甚至只是函数)来实现这一点”。多么愚蠢的问题!雇佣一个程序员,他/她会告诉你同样的事情。这里有点不必要的回应,@Jeeped,因为提问毕竟是论坛的目的。谢谢Jonathan-但事实证明,要完成每个客户只返回第一张发票的最终结果仍然很困难。已将数据移动到MySQL以便更好地操作。