VBA自动过滤复制值,去重并粘贴到其他工作表中

Posted

技术标签:

【中文标题】VBA自动过滤复制值,去重并粘贴到其他工作表中【英文标题】:VBA Autofilter copy values, deduplicate and paste in other sheet 【发布时间】:2021-02-19 16:23:44 【问题描述】:

我想从 Sheet1 中复制不在 Sheet2 中的“C”列中的值。由于循环太慢,我添加了带有 X 缺失行的 vlookup 标记。然后我使用值 X 进行自动过滤,并从 C 列复制值并将其粘贴到 A 列的文件底部。我想在那里粘贴重复数据删除的值。有没有办法在粘贴到新工作表之前删除重复值?

我的代码目前处理所有值:

Sub Copy_Value()

Dim Con As Worksheet
Dim Des As Worksheet
Dim Test As Worksheet
Dim Lastcol As Integer
Dim Lastrow As Integer
Dim Lastrow2 As Integer
Dim i As Long

Application.EnableEvents = False
Application.ScreenUpdating = False
Lastrow = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.Count, "C").End(xlUp).Row


Set Res = ThisWorkbook.Sheets("Sheet2")
Set Con = ThisWorkbook.Sheets("Sheet1")
Set copyRange = Con.Range("C2:C" & Lastrow)

Con.Range("L1").AutoFilter Field:=12, Criteria1:="X"
Lastrow2 = Sheets("Sheet2").Cells(Sheets("Sheet2").Rows.Count, "A").End(xlUp).Row

copyRange.SpecialCells(xlCellTypeVisible).Copy Res.Range("A" & Lastrow2 + 1)


End Sub

谢谢

【问题讨论】:

【参考方案1】:

RemoveDuplicates 是一个运行速度非常快的 VBA 函数,可能是适合您特定情况的解决方案。根据我们当前代码的逻辑(使用 Sheet1 上 Col L 中的“X”进行过滤),下面的代码实现了您想要的。

Option Explicit
Sub Copy_Value()
Dim LastRow As Long, PasteRow As Long
Application.ScreenUpdating = False

LastRow = Sheet1.Cells(Rows.Count, 3).End(xlUp).Row
PasteRow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row + 1

Sheet1.Columns(12).AutoFilter 1, "X"

Sheet1.Range("C2:C" & LastRow).SpecialCells(xlCellTypeVisible).Copy _
Sheet2.Cells(PasteRow, 1)

LastRow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row

With Sheet2.Range("A" & PasteRow & ":A" & LastRow)
    .RemoveDuplicates 1, xlNo    '<~~ xlNo = no header
End With

Sheet1.AutoFilterMode = False
End Sub

【讨论】:

以上是关于VBA自动过滤复制值,去重并粘贴到其他工作表中的主要内容,如果未能解决你的问题,请参考以下文章

VBA根据数据值将数据从主表复制并粘贴到另一个表中

Excel VBA根据条件从一个工作表复制到其他工作表特定单元格

VBA使用自动筛选器将值复制到另一个工作表

将多个工作表中的值复制并粘贴到摘要工作表中

VBA - 仅将可见单元格从工作表复制到另一个工作表

如何用VBA判断符合条件的数据复制粘贴到相应工作表?