【发布时间】:2011-11-06 19:49:46
【问题描述】:
需要一个非常优化的代码。好吧,我有一个项目,我已经成功地使它与 vba 一起工作(主要是由 stackoverflow 程序员提供的,谢谢) 但是今天我收到了反馈。它在记录中删除了另外 2 个唯一条目但我不知道为什么要删除它们。
我应用的算法
我已经使用了我在 google 上找到的 COUNTIF 函数
="countif(A$1:A2,A3)=0" A3 is the active cell, Checks A2,A1 for dupes
如果 A 列中存在重复则抛出 False,如果它是唯一的则抛出 True。我对 Countif 的理解是 它检查该单元格中的所有上述列值,我的意思是让我们取 A4。所以它检查 A2,A1,A3 是否有重复项。同样,A10 检查 A1 到 A9 并抛出 TRue 或 False。它工作正常,但我不知道出了什么问题代码不适用于某些条目。有时甚至会为唯一条目显示 False。
由于我拥有更多数据,因此应用这些公式需要更多时间。我试图让它更清洁和更优化的方式。人们告诉我它不是 c 或其他语言来优化它,但我需要让我的代码更优化的代码
我需要这些条件的代码,任何人都可以帮助我,因为我的计数失败了。我这样做有点无助。
1)我有一列,我应该检查该列中的重复项,如果重复则删除该行
2) 我在该列中有 35000 个旧条目,并且我每周都有 2000 个新条目,这些都被附加。我需要从总共 37000 个条目中检查这 2000 个条目(当我们追加时,我们得到 35000+2000 个),并且这些删除操作只需要对新添加的 2000 个条目执行,但它应该检查整个列的重复项
让我清楚地解释一下,我新添加了 2000 个条目,因此仅检查这些条目是否与 35000 个条目以及其自身(2000 个条目)中的重复项,如果是重复项且没有重复操作则将其删除应该对 35000 个条目的旧数据执行。
我找到了一些代码,但它们甚至删除了 35000 个条目的重复项。我已经设置了范围,但即使它不起作用。 任何人都可以帮助我编写花费更少时间的最佳代码吗?谢谢
用我的示例代码更新我的问题
A B F G H I Y
PTY 39868.5 4 2 540 3 PTY39868.5425403
GTY 34446.1234 2 1 230 1 GTY34446.1234212301
PTY 3945.678 2 2 PTY3945.67822
GTY 34446.1234 2 1 230 1 GTY34446.1234212301
let us say these are old 35000 entries
上面例子的解释。
以上是35000个条目。我必须检查 A、B、F、G、H、I 列是否有欺骗性,如果它们相同,我必须删除该行,我不应该为其他列 c、d 等而烦恼,所以我所做的是我使用了一个未使用的 Y 列,并使用这些将这 6 个列的值连接到 Y 列的 1
= A2 & B2 & F2 & G2 & H2 &I2 with the respective columns
现在检查 Y 列是否存在欺骗并删除整行。据我所知,2003 年仅支持一栏。
请注意,即使是 35000 个条目也可能有重复项,但我不应该删除它们。示例您可以看到我的示例代码中的第 2 行和最后一行是骗子,但我不应该删除 因为它是旧数据。
A B F G H I Y
PTY 39868.5 4 2 540 3 PTY39868.5425403 'old
GTY 34446.1234 2 1 230 1 GTY34446.1234212301 'old
PTY 3945.678 2 2 PTY3945.67822 'old
GTY 34446.1234 2 1 230 1 GTY34446.1234212301 'old
PTY 3945.678 1 1 230 2 PTY3945.678112302 'new
PTY 39868.5 4 2 540 3 PTY39868.5425403 'new
PTY 3945.678 1 1 230 2 PTY3945.678112302 'new
现在请注意,新条目 PTY(从最后 2 个开始)是原始记录的副本(最初是 PTY)所以我必须删除它。最后一个新条目是新条目本身的副本,所以我应该删除它甚至那个。所以在上面的代码中,我只需要删除最后 2 行,它们是原始记录的副本,也可以从中删除。但不应该删除被骗但在原始记录中的GTY。
我想我现在给出了一个清晰的观点。将它们连接成一个单元格。是更好的方法吗?作为 40000 个条目的 conactenatin 仅需 2 秒,我认为这没关系,但任何更多算法对这些都非常有用
我听说 counif 将 45.00 和 45.00000 视为不同的,是正确的可能是它的问题吗?因为我的数据中有小数点。我觉得我应该这样做
= I2 & H2 & G2 & F2 & A2 & B2
哪个更好连接?这是我之前发布的还是其他的?
【问题讨论】:
标签: vba excel excel-2003 excel-formula