Excel函数查找大表中的重复行

我有一个长达数千行的表,我想查找重复的行。 我已经使用countifs(),它是function性的,但它也是非常资源密集型的,我想find一个方法来以更便宜的方式做到这一点。

我想检查的数据的一个例子如下

Date Product Name Quantity Delivered to 10-1-15 Toilet Paper 1 Health Science 10-1-15 Paper Towel 1 Health Science 10-1-15 Can Liners 2 Health Science 10-2-15 Toilet Paper 2 Administration 10-2-15 Paper Towel 1 Health Science 

我使用的公式是

 =(countifs(A:A,A2,B:B,B2,C:C,C2,D:D,D2)) 

但是这需要几分钟的时间来评估我所拥有的数据量。 我想设置一个公式,只比较相同date的行,所以以前的行不必重新计算,以后的行不必考虑以前的增加。

这背后的目的是确保此表的用户不会双击input行。 我每周都会手工检查重复数据,因为这是一个数据挖掘工具,用于从存储仓库中读取我们的纸张注销日志(我们知道这是一个过时的系统,但这是我们现在需要处理的),但是如果表单可以提醒我可能发生重复(特别是不需要3到5分钟input每行),则会更容易检查我的数据。

另外,我宁愿使用一个公式,而不是VBA,因为我有足够的时间来训练人们在networking驱动器上使用工具,而没有关于不安全脚本的可怕警告。

公式 – 查找重复项

假设数据位于A1:D1017范围内(根据需要更改)

我提出的解决scheme包括使用两个工作领域如下:

A.在E1inputKey并在E2这个公式中拼接所有要validation的字段,然后复制公式直到最后一条logging

 =CONCATENATE( A2 , CHAR(133) , B2 , CHAR(133) , C2 , CHAR(133) , D2 ) 

CHAR(133)字符用作分隔符,省略或根据需要进行更改。

B.第二个字段叫做!Chk ,用来标记Duplicatedlogging。 然而,由于这个解决scheme包含三个选项,我们在这个目的下Chk.3在单元格F1G1H1有3个字段Chk.1Chk.2Chk.3

  1. 标记所有Duplicatedlogging(包括原始)在单元格F2input此公式并复制到最后一个logging

     =IF( COUNTIF( $E$1:$E$1017, $E2 ) = 1, "", "Duplicated" ) 
  2. 只标记Duplicatedlogging,留下找不到的第一条logging。

     =IF( COUNTIF( $E$1:$E2, $E2 ) = 1, "", "Duplicated" ) 
  3. 只标记Duplicatedlogging,标记find的第一个logging为Original

     =IF( COUNTIF( $E$1:$E$1017, $E2 ) = 1, "", IF( COUNTIF( $E$1:$E2, $E2 ) = 1, "Original", "Duplicated" ) ) 

在这里输入图像说明

如果可取的话,隐藏F

这对于SQL来说是微不足道的。 您可以使用SQL查询Excel,但是我不确定性能会是什么样的。 看看这里 ,看看SQL不会帮助。

我写了一个可怕的公式,可以做这个工作。 这几乎是不可读的,但它不再基于整个表重新计算。 我已经把这个公式input到我的数据input的右边一栏中,并把“!!” 如果该行复制了前一个行 它也检查我input了一整行数据,以防止在input数据时进行评估。

 =IF( COUNTA(A1017:D1017)=4, IF( COUNTIFS( INDIRECT(IF(ROW(<26,"A2:A"&ROW()+25,"A"&ROW()-25&":A"&ROW()+25)),$A1017, INDIRECT(IF(ROW(<26,"B2:B"&ROW()+25,"B"&ROW()-25&":B"&ROW()+25)),$B1017, INDIRECT(IF(ROW(<26,"C2:C"&ROW()+25,"C"&ROW()-25&":C"&ROW()+25)),$C1017, INDIRECT(IF(ROW(<26,"D2:D"&ROW()+25,"D"&ROW()-25&":D"&ROW()+25)),$D1017 ) >1,"!!","") ,"") 

它所做的是检查上面和下面的25行是否有重复项,因为有25项大于任何一天添加的最大项目数。 结果是,这需要不到一秒钟,以表明我是否input了重复的行。

我将在评论中尝试pnuts提出的解决scheme

如果您检查针对新inputdate筛选的数据透视表,而不是针对原始数据,则可能会获得更多速度。

这似乎是一个更优雅的解决scheme,即使它没有指出哪一行是罪魁祸首,它确实给了我find违规行的必要数据。