【问题标题】:excel: check for duplicate rows based on 3 columns and keep one rowexcel:根据3列检查重复行并保留一行
【发布时间】:2020-07-03 16:25:53
【问题描述】:

这可能有点问,但我想知道以下是否可能。这都是基于我对How do I copy a range of formula values and paste them to a specific range in another sheet?的最初问题

我有一张包含大约 12 列的工作表,其中复制了相同类型的数据,这意味着两行或多行可能包含完全相同的数据,但是如果我可以检查重复项,它将基于 3 个特定列.

我不想为此任务使用自动筛选或条件格式,因为工作表可能包含数百到数千行,我希望能够找到重复项,删除它们并只保留一份原始文件。我还在这里阅读了有关根据列条件删除重复项的其他帖子,但到目前为止没有一个对我有用。

数据范围是从 A 到 P 和向下,识别重复的 3 列是 A(数字,ID)、B(日期)和 P(文本字符串)。这些数据来自哪里,它总是具有相同的格式并且总是被放置在相同的列中,这就是为什么如果 A、B、P 相同,那么它被认为是重复的。

【问题讨论】:

  • 因为我找到的那些,搜索了值(大于、小于、0 等),其他一些在运行宏后将我的报告的文件大小增加了 500%。我尝试了很多,但没有看到您刚刚链接的那个。

标签: excel vba


【解决方案1】:

此代码适用于我(lastrow 基于@SiddharthRout 的this asnwer):

Sub test()

    Dim lastrow As Long

    With ThisWorkbook.Worksheets("Sheet1")
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            lastrow = .Cells.Find(What:="*", _
                          After:=.Range("A1"), _
                          Lookat:=xlPart, _
                          LookIn:=xlFormulas, _
                          SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious, _
                          MatchCase:=False).Row
        Else
            lastrow = 1
        End If

        'Array(1, 2, 16) means 1 - for A, 2 for B and 16 for P columns
        .Range("A1:P" & lastrow).RemoveDuplicates Columns:=Array(1, 2, 16), _
            Header:=xlYes
    End With
End Sub

【讨论】:

  • 再次感谢您。这完全符合我的需要。您已经为我的每个问题找到了一个出色而简单的解决方案。现在我只需要彩票号码。 =)
  • 使用该解决方案时,请确保您始终拥有所需的列,并填写了数据。例如,如果数组提到它,应该有一个包含数据的列 P。 Otherwise error 1004 is possible, if the data is new
猜你喜欢
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 2018-07-27
相关资源
最近更新 更多