【问题标题】:Finding duplicates in different sheets or giving a message box if duplicate is found在不同的工作表中查找重复项或在发现重复项时提供消息框
【发布时间】:2017-11-21 14:24:26
【问题描述】:

我已经尝试了几个选项,但无法得到我想要的。 我有一个 31 张工作簿,每张工作表都有一个输入数字条目的列。一张纸可以有重复,但不同的纸之间不应该有重复。我该怎么做?

到目前为止,我已经想出了另一张表,它使用 IF 从其他 31 个中获取所有值,并在宏按钮的帮助下删除每列中的重复项(对于每张表)。顶部有一个条件格式,因此它会在该表中显示是否输入了重复项。但是,最好有一个弹出窗口说有重复。

在包含所有条目的工作表中,我还有 0 和 Empty 值,在每种情况下,它们都将出现在每一列中。

最好的解决方案是有一个可以在需要检查时按下的按钮。

感谢您的任何建议!

我是否忘记提及我在 VBA 方面完全是菜鸟?我不认为我尝试过的事情是相关的。因为我只需要将按钮的代码放置在每个工作表“检查”中,这将检查工作表的所有值并在找到重复项时发出消息,但 0 和空除外。

【问题讨论】:

  • 到目前为止你尝试过什么?使用您提到的当前工作代码/宏更新您的问题,以便我们知道从哪里开始。

标签: excel vba duplicates messagebox


【解决方案1】:

您不需要 VBA。尽管我是一名软件开发人员,但我尽量少使用 VBA。

假设所有 31 张纸的值都在 A1-A10 的每张纸上。然后在每张纸上执行以下操作:

首先使用工作表的唯一值创建一列。为此,您需要一个“矩阵公式”。跳过 C1 并在单元格 C2 中键入以下公式,然后按 CTRL-SHIFT-ENTER(不仅仅是 ENTER!)关闭:

=IFERROR(INDEX($A$1:$A$10, MATCH(0, IF(ISBLANK($A$1:$A$10),1,COUNTIF($C$1:C1, $A$1:$A$10)), 0)),"")

现在你得到一个矩阵公式。如您所见,公式周围现在有括号 {}。 现在将公式向下填充到 C11,您只会得到 A1-A10 的唯一值。完成 31 次后,将所有 31 列 C 引用到概览表中。

您可以在带有条件格式的概览表中看到重复项。这是解释here。使用此解决方案,可以很容易地查明重复项。

但是,如果您想使用值而不是格式,请创建第二张概览表并将此公式放入 A1:

=IF(ISNUMBER(OverviewSheet!A1),IF(OverviewSheet!A1<>0,COUNTIF(OverviewSheet!$A$1:$AE$10,OverviewSheet!A1)>1))

并将此公式填充到单元格 AE10。您将获得整个范围的 TRUE/FALSE。此公式还考虑了空单元格和零。

现在把这个公式放在第二个概览表的某个地方:

=COUNTIF(A1:AE10,TRUE())>0

如果您的 31 张纸上有重复项,那么现在您有一个单元格仅包含 TRUE 或 FALSE。

如果您希望在按钮下获得此结果,我相信您将能够为此创建一个宏。

也许有更短的结果,但这是我想出的。

成功了!

编辑:

好吧,也许我对 VBA 过于乐观了。假设最后一个公式在 AF1 中,那么这是你的宏:

Sub Check()
    If ThisWorkbook.Sheets("OverviewSheet2").Range("AF1").Value = True Then
        MsgBox "We have duplicates!"
    Else
        MsgBox "We have no duplicates."
    End If
End Sub

现在这个宏最简单的选项是放在快捷键下(查看 -> 宏 -> 查看宏 -> 选择“检查”宏 -> 选项... -> 快捷键),例如CTRL-SHIFT-D。那么你就不需要每张纸上都有 31 个按钮了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2017-07-22
    相关资源
    最近更新 更多