excel - 如何删除重复行但保存最新行(VBA)?
问题描述
我有一个 excel,我有 2 张工作表,我想将选定的列导入另一张工作表并删除可能的重复行。问题是,当我运行我的代码时,它会删除我最新的重复行,即使我想保存最新的行并删除另一个“旧”重复。我真的很感激任何帮助!谢谢:)这是我迄今为止尝试过的代码:
Private Sub CommandButton1_Click()
Cells.RemoveDuplicates Columns:=Array(1, 2, 3)
Dim lastrow As Long, erow As Long
lastrow = Worksheets("one").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastrow
Worksheets("one").Cells(i, 1).Copy
erow = Worksheets("two").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("one").Paste Destination:=Worksheets("two").Cells(erow + 1, 1)
Worksheets("one").Cells(i, 3).Copy
Worksheets("one").Paste Destination:=Worksheets("two").Cells(erow + 1, 2)
Next i
End Sub
另一个问题是,我已经尝试过这段代码来测试excel,但是我想使用这个宏的地方有很多更大的数据。浏览所有数据需要很长时间..是我的代码中的问题还是实际的excel太大了?我希望我能清楚地解释一切。
谢谢!
解决方案
“问题是,当我运行我的代码时,它会删除我最新的重复行......”
问题是数据的排序顺序。
Remove Duplicates
从第一个索引移动到最后一个并保持第一次出现。因此,您要么需要对数据进行排序,以使您的“最旧”重复项是第一次出现在顶部,要么您必须使用不同的方法来删除重复项。
“是我的代码有问题还是实际的excel太大了?”
可能两者兼而有之,但可以肯定的是,您的代码绝对可以运行得更快。
低悬的果实是放在Application.EnableScreenUpdating = False
你子的开头。这会阻止 Excel 在您运行时更新屏幕。这将产生巨大的影响。只需记住将其重新设置为True
。
您还一次循环遍历一个范围,但我看不出您需要这样做的任何特殊原因。您可以在单个语句中复制 while 范围而无需循环。您甚至不需要复制您不关心订购格式,您可以传输值只是使范围彼此相等。
如何在不剪切或循环的情况下传输值的示例
Worksheets("two").Range("A2:A" & lastrow).Value = Worksheets("one").Range("E2:E" & lastrow).Value
如果您愿意,可以使用与复制和粘贴相同的方法。
推荐阅读
- c++11 - 我可以使用已删除指针的名称吗?
- javascript - Nightwatch/Cucumber - 场景大纲和示例表不起作用
- pytorch - NameError:名称“utils”未在 Pytorch 中定义
- python - TensorFlow-GPU 不会运行 GPU
- asp.net - 数字海洋 Linux 服务器上的 Asp.net 核心 SqlException
- google-sheets - 匹配(同一工作簿)中的(另一个工作表)单元格时的条件格式?谷歌表格
- python - 在 Python 3.7+ 中更改 dict 中的键顺序
- json - 如何从 Bigquery 中的嵌套 JSON 类型列中查询特定内容
- python - 如何在 Unet 架构 PyTorch 中处理奇数分辨率
- python - 在python中四舍五入