删除Excel 2003 vba列中的重复条目
那么问题是,我有一个列,例如 Y 列中有很多条目,接近 40,000 个,并且每周都在增加。问题是我必须检查 Y 列中的重复项并删除整行。因此,Y 列应该只有唯一的条目。
假设我有 3,000 个条目,1 周后,我将拥有大约 3,500 个条目。现在我必须检查这些新添加的 500 个列值,而不是旧的 3,500 个列值 + 新的 3,500 个条目,并删除重复的行。旧的 3,000 条不应删除或更改。我找到了宏,但它们对整个列都有效。我想过滤新的 500 个值。
Cells(2, "Q").Formula = "=COUNTIF(P$1:P1,P2)=0" 'I have used these formula
Range("Q2").Copy Destination:=Range("Q3:Q40109") 'it gives false for the duplicate values
我知道我们必须使用 countif
来处理重复条目。但我正在做的是应用公式,然后搜索错误条目,然后将其删除。我相信应用公式并发现错误然后删除它有点耗时。
Sub DeleteDups()
Dim x As Long
Dim LastRow As Long
LastRow = Range("A65536").End(xlUp).Row
For x = LastRow To 1 Step -1
If Application.WorksheetFunction.CountIf(Range("A1:A" & x), Range("A" & x).Text) > 1 Then
Range("A" & x).EntireRow.Delete
End If
Next x
End Sub
这是我在谷歌上找到的,但我不知道错误在哪里。如果我设置,它会删除所有列
For x = LastRow To 1 Step -1
For x = LastRow to step 3000 ' It is deleting all 500 columns but if it is -1 working fine
这些功能需要进行任何修改吗?或者建议我任何对我有帮助的好功能。检查整个列中选定列范围的重复值。我的意思是检查 500 个完整列值与 3500 个列条目值,并删除 500 个条目中的重复项
提前致谢
Well the question is, I have got a column, for example column Y has many entries in it, nearly 40,000 and It increases everyweek. The thing is I have to check for duplicates in Y column and delete the entire row. Thus, Y column should have only unique entries.
Suppose I have 3,000 entries and after 1 week, i'll have about 3,500 entries. Now I have to check these newly added 500 columnn values not the 3,500 with the old + the new i.e 3,500 entries and delete the duplicated row. The old 3,000 shouldn't be deleted or changed. I have found macros but they do the trick for the entire column. I would like to filter the new 500 values.
Cells(2, "Q").Formula = "=COUNTIF(P$1:P1,P2)=0" 'I have used these formula
Range("Q2").Copy Destination:=Range("Q3:Q40109") 'it gives false for the duplicate values
I know we have to use countif
for the duplicate entries. But what Iam doing is applying the formula and then search for false entries and then delete it. I belive applying formula and finding false and then deleting its little bit time consuming.
Sub DeleteDups()
Dim x As Long
Dim LastRow As Long
LastRow = Range("A65536").End(xlUp).Row
For x = LastRow To 1 Step -1
If Application.WorksheetFunction.CountIf(Range("A1:A" & x), Range("A" & x).Text) > 1 Then
Range("A" & x).EntireRow.Delete
End If
Next x
End Sub
This is what I found on google but i dont know where the error is. It is deleting all the columns if i set
For x = LastRow To 1 Step -1
For x = LastRow to step 3000 ' It is deleting all 500 columns but if it is -1 working fine
Any modifications need to be done for these function? or sugest me any good function that helps me. Check for the duplicate values of a selected column range from the entire column. I mean check 500 entires column values with the 3500 column entry values and delete the duplicates in 500 entries
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这应该是相当简单的。您需要在文件中的某个位置创建 1 个单元格,以便在删除所有重复项后每周写入 Y 列的单元格计数。
例如,假设您在第 1 周删除了重复项,则剩下的范围为 Y1:Y100。您的函数会将“100”放入文件中的某个位置以供引用。
下周,您的函数将开始从(带有参考号的单元格)+ 1 的重复项开始查找,因此 Y:101 到列末尾。删除重复项后,该函数将参考单元更改为新计数。
代码如下:
*抱歉,不知道为什么自动语法突出显示使此内容难以阅读
更新:
这是在 Excel 2003 中执行此操作的一种方法。技巧是向后循环该列,以便当您删除一行时,循环不会被破坏。我使用字典(我以过度使用字典而闻名),因为它可以让你轻松检查是否有误。
This should be rather simple. You need to create 1 cell somewhere in your file that you will write the cell count for column Y each week after removing all dupes.
For example, say week1 you remove dupes and you are left with a range of Y1:Y100. Your function will put "100" somewhere in your file to reference.
Next week, your function will start looking from dupes from (cell with ref number) + 1, so Y:101 to end of column. After removing dupes, the function changes the ref cell to the new count.
Here is the code:
*sorry no idea why auto-syntax highlighting makes this hard to read
Update:
Here is a way to do it in Excel 2003. The trick is to loop backwards through the column so that the loop isn't destroyed when you delete a row. I use a dictionary (which I'm famous for over-using) since it allows you to check easily for dupes.
Excel 如何知道条目是“新”的? (例如,我们怎么知道我们只需要考虑最后 500 行)
实际上,如果您上周已经执行了该宏,则前 3,000 行不会有任何重复项,因此当前执行不会更改这些行。
您描述的代码应该几乎可以工作。如果我们保留它并稍微改变它:
[编辑]另一个(可能更快)解决方案:首先过滤值,然后删除可见行:
抱歉,无法在这里测试最后一个解决方案。
How can Excel know that entries are "new"? (e.g. how can we know we only have to consider the 500 last rows)
Actually, if you already executed the macro last week, the first 3,000 rows won't have any duplicates so the current execution won't change these rows.
The code your described should nearly work. If we keep it and change it very slightly:
[EDIT] Another (probably faster) solution: filter first the values and then delete the visible rows:
Couldn't test this last solution right here, sorry.
这是一个想法:
它检查当前单元格上方的整个范围是否有单个重复项。如果找到,则删除当前行。
编辑我刚刚在你的例子中意识到,你说的是Y列,但在你的代码中你正在检查A。不确定这个例子是否只是一个假设,但想确保这不是原因对于奇怪的行为。
请注意,这是未经测试的!请在尝试此操作之前保存您的工作簿!
Here's an idea:
It checks the entire range above the current cell for a single duplicate. If found, it the current row is deleted.
EDIT I just realized in your example, you said column Y, but in your code you are checking A. Not sure if the example was just a hypothetical, but wanted to make sure that wasn't the reason for the odd behavior.
Note, this is untested! Please save your workbook before trying this!