如何使用 VBA 在 Excel 宏中删除具有两列的重复项?

Posted

技术标签:

【中文标题】如何使用 VBA 在 Excel 宏中删除具有两列的重复项?【英文标题】:How to delete duplicates with two columns in a Excel macro using VBA? 【发布时间】:2021-12-18 06:54:34 【问题描述】:

我正在尝试创建一个 VBA 宏,在该宏中,用户被要求从输入框中为“A:A”之类的范围选择一列。然后要求他们输入第二列范围,例如“C:C”。

一旦选择了两个范围,我想让 excel 比较两个列范围的重复项并将它们从第一个范围中删除。

例如,如果用户选择了列 range1 和列 range2。两者都有编号为 5 和 7 的单元格,我希望列 range1 删除所有编号为 5 和 7 的单元格。

【问题讨论】:

【参考方案1】:

我编写了一些 VBA 代码,这些代码将根据我对您在做什么的理解来执行此操作。但是,我假设数据量相对较小并且对效率的需求不是很大。 另外,不用担心任何错误处理等。

需要进行修改才能使其性能更强大。

选项显式

Sub DeleteDupValuesInFirstSelectedColumn() '例程要求用户选择两个范围,然后 ' 删除第一个列中重复的值 ' 在第二个范围内

Dim CWS As Worksheet
Dim SelRng As Range, Col1 As Range, Col2 As Range
Dim Cell1 As Range, Cell2 As Range

Set CWS = ActiveSheet

'Ask the user to select a range
Set SelRng = Application.InputBox( _
  Title:="Range 1 Selection", _
  Prompt:="Select the first column", _
  Type:=8)

'Limit the selection to the first column in the used range
Set Col1 = Intersect(CWS.UsedRange, SelRng.Columns(1).EntireColumn)

'Ask the user to select a second range
Set SelRng = Application.InputBox( _
  Title:="Range 2 Selection", _
  Prompt:="Select the second column", _
  Type:=8)

'Limit the selection again
Set Col2 = Intersect(CWS.UsedRange, SelRng.Columns(1).EntireColumn)

'Super inefficient. Relying on insignificant amounts of values
'Don't use loop within a loop for anything important
For Each Cell2 In Col2
    For Each Cell1 In Col1
        If Cell1.Value = Cell2.Value Then
            'If the correct cells are being filled, uncomment the line to delete
            Cell1.Interior.ColorIndex = 3
            'Cell1.Delete Shift:=xlUp
        End If
    Next Cell1
Next Cell2

结束子

【讨论】:

完美运行。谢谢! 由于某种原因,如果我要处理大量数据,我该如何提高效率? 出于某种原因,如果我有大量数据,您将如何提高效率? 有很多东西可以让事情变得更有效率。如果您可以利用 Excel 的内部函数,它们通常会更快。将范围存储为数组,对数组执行操作然后粘贴结果通常会显示最大的效率收益。此外,有时关闭计算和显示也是值得的。

以上是关于如何使用 VBA 在 Excel 宏中删除具有两列的重复项?的主要内容,如果未能解决你的问题,请参考以下文章

如何将列值转换为vba宏中的行

Excel VBA 宏中的数组

Vba for Excel 宏中的集合数组

如何使用 vba 从具有多个数据字段的 excel 数据透视表中删除小计

如何从选定的 Excel 工作表单元格中在宏中添加时间戳

Excel VBA宏 - 带有格式的复制插入数据的问题