在不同的工作表中查找重复项或在找到重复项时给出消息框
Finding duplicates in different sheets or giving a message box if duplicate is found
我已经尝试了几种选择,但无法得到我想要的。
我有一个 31 sheet 的工作簿,每个 sheet 都有一列用于输入数字条目。一个 sheet 中可以有重复项,但不同 sheet 中不应有重复项。我应该怎么做?
到目前为止,我想出了另一个 sheet,它使用 IF 从其他 31 个中获取所有值,并借助宏按钮删除每列中的重复项(对于每个 sheet) .顶部有一个条件格式,因此它在 sheet 中显示是否输入了重复项。但是,如果有一个弹出窗口说有重复是最好的。
在包含所有条目的 sheet 中,我还有 0 和空值,它们在每种情况下都会出现在每一列中。
最好的解决方案是有一个按钮,可以在需要检查时按下。
感谢任何建议!
我是不是忘了说我在 VBA 方面完全是菜鸟?我不认为我尝试过的事情是相关的。因为我只需要将按钮的代码放在每个 sheet "Check" 中,这将检查 sheet 的所有值并在找到重复项时给出消息,除了 0和空。
你不需要 VBA。即使我是一名软件开发人员,我也会尽可能少地使用 VBA。
假设所有 31 个 sheet 的值都在 A1-A10 中的每个 sheet 上。然后按照 sheet:
执行以下操作
首先用 sheet 的唯一值创建一个列。为此,您需要 "matrix formula"。跳过 C1 并在单元格 C2 中键入以下公式并使用 CTRL-SHIFT-ENTER(不仅仅是 ENTER!)关闭:
=IFERROR(INDEX($A:$A, MATCH(0, IF(ISBLANK($A:$A),1,COUNTIF($C:C1, $A:$A)), 0)),"")
现在你得到了一个矩阵公式。如您所见,现在公式周围有方括号 {}。
现在将公式向下填充到 C11,您将只得到 A1-A10 的唯一值。执行此操作 31 次后,将所有 31 列 C 引用到概览 sheet。
您可以在概述 sheet 中使用条件格式查看重复项。解释here。使用此解决方案,可以很容易地查明重复项。
但是如果您想要值而不是格式,请创建第二个概览 sheet 并将此公式放入 A1:
=IF(ISNUMBER(OverviewSheet!A1),IF(OverviewSheet!A1<>0,COUNTIF(OverviewSheet!$A:$AE,OverviewSheet!A1)>1))
并将此公式填入单元格 AE10。您将获得整个 TRUE/FALSE 范围。此公式还考虑了空单元格和零。
现在把这个公式放在第二个概述的某个地方sheet:
=COUNTIF(A1:AE10,TRUE())>0
如果您在 31 sheet 中有重复项,现在您有一个单元格只包含 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
现在这个宏最简单的选项是放在快捷键下(查看 -> 宏 -> 查看宏 -> Select 'Check' 宏 -> 选项... -> 快捷键),例如CTRL-SHIFT-D。那么你不需要在每个 sheet.
上设置 31 个按钮
我已经尝试了几种选择,但无法得到我想要的。 我有一个 31 sheet 的工作簿,每个 sheet 都有一列用于输入数字条目。一个 sheet 中可以有重复项,但不同 sheet 中不应有重复项。我应该怎么做?
到目前为止,我想出了另一个 sheet,它使用 IF 从其他 31 个中获取所有值,并借助宏按钮删除每列中的重复项(对于每个 sheet) .顶部有一个条件格式,因此它在 sheet 中显示是否输入了重复项。但是,如果有一个弹出窗口说有重复是最好的。
在包含所有条目的 sheet 中,我还有 0 和空值,它们在每种情况下都会出现在每一列中。
最好的解决方案是有一个按钮,可以在需要检查时按下。
感谢任何建议!
我是不是忘了说我在 VBA 方面完全是菜鸟?我不认为我尝试过的事情是相关的。因为我只需要将按钮的代码放在每个 sheet "Check" 中,这将检查 sheet 的所有值并在找到重复项时给出消息,除了 0和空。
你不需要 VBA。即使我是一名软件开发人员,我也会尽可能少地使用 VBA。
假设所有 31 个 sheet 的值都在 A1-A10 中的每个 sheet 上。然后按照 sheet:
执行以下操作首先用 sheet 的唯一值创建一个列。为此,您需要 "matrix formula"。跳过 C1 并在单元格 C2 中键入以下公式并使用 CTRL-SHIFT-ENTER(不仅仅是 ENTER!)关闭:
=IFERROR(INDEX($A:$A, MATCH(0, IF(ISBLANK($A:$A),1,COUNTIF($C:C1, $A:$A)), 0)),"")
现在你得到了一个矩阵公式。如您所见,现在公式周围有方括号 {}。 现在将公式向下填充到 C11,您将只得到 A1-A10 的唯一值。执行此操作 31 次后,将所有 31 列 C 引用到概览 sheet。
您可以在概述 sheet 中使用条件格式查看重复项。解释here。使用此解决方案,可以很容易地查明重复项。
但是如果您想要值而不是格式,请创建第二个概览 sheet 并将此公式放入 A1:
=IF(ISNUMBER(OverviewSheet!A1),IF(OverviewSheet!A1<>0,COUNTIF(OverviewSheet!$A:$AE,OverviewSheet!A1)>1))
并将此公式填入单元格 AE10。您将获得整个 TRUE/FALSE 范围。此公式还考虑了空单元格和零。
现在把这个公式放在第二个概述的某个地方sheet:
=COUNTIF(A1:AE10,TRUE())>0
如果您在 31 sheet 中有重复项,现在您有一个单元格只包含 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
现在这个宏最简单的选项是放在快捷键下(查看 -> 宏 -> 查看宏 -> Select 'Check' 宏 -> 选项... -> 快捷键),例如CTRL-SHIFT-D。那么你不需要在每个 sheet.
上设置 31 个按钮