excel宏,需要一个算法来比较两个列表

时间:2014-09-07 22:35:14

标签: excel algorithm vba

我需要制作一个宏来比较两列寻找重复单元格。

我目前正在使用这个简单的双循环算法

for i = 0 To ColumnASize
   Cell1 = Sheet.getCellByPosition(0,i)

   for j = 0 to ColumnBSi
   Cell2 = Sheet.getCellByPosition(1,j)

   ' Comparison happens here

   Next j
Next i

然而,由于每列中有1000多个项目,因此该算法非常慢且效率低下。有没有人知道/有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

如果要确保col A中的任何字符串都不等于col B中的任何字符串,那么现有算法的顺序为n ^ 2。您可以通过以下方式改进:

1)对col A或其副本(order nlogn)进行排序

2)对col B或其副本(order nlogn)进行排序

3)通过列表遍历查找重复项,请参阅this上一个答案(顺序n)。

那应该给你一个订单nlogn解决方案,我不认为你可以做得更好。