无论顺序如何,我都需要找到重复的数据。我正在处理 17,000个动态数据,我不想使用删除副本,在excel或条件格式中使用过滤器功能。我只想要这个公式。如果有人可以给我一个公式,那真的是非常感激。
如下所示的示例,其中重复的顺序无关紧要:
答案 0 :(得分:2)
如果所有值都是数字,我使用工作表公式解决了这个问题。从理论上讲,这也适用于非数字,但它并不适用。它非常接近,但是当非数字输入数据时,数组公式进行排序,复制位置。
正如@ Gary的学生提到的,你将需要有很多辅助列。您的要求非常复杂。我仍然认为VBA是最好的选择。我想如果你想用怪异的VBA吓唬你的最终用户或者用很多公式吓唬他们,你会选择它。但是,它没有办法绕过它。无论你交给他们什么,他们都会害怕。
无论如何,我认为我可以分享它,因为它可能有所帮助:
列H:M
包含令人讨厌的数组公式。 I stole it from Chip Pearson who has a nice explaination of it here。该公式对每行中的值进行排序。要输入数组公式,您必须在输入公式后按Ctrl + Shift + Enter而不是Enter。然后将获得那些大括号,让您知道excel将其视为数组公式。
然后我们在列N
中连接在一起:
最后测试是否有其他匹配的连续排序结果:
同样,如果你将Apple
粘贴到混音中,你会得到不正确的排序,但我认为调整那个数组公式就可以了。
答案 1 :(得分:1)
在 G1 中输入:
=IF(SUMPRODUCT(1/COUNTIF(A1:F1, A1:F1))=COUNTA(A1:F1),"unique combination","duplicates")
并复制下来:
修改#1:强>
这种方法基于JNevill的评论,确实涉及一点VBA。如果您无法容忍任何VBA,请忽略此编辑。
在标准模块中,安装以下代码:
Public Sub aSort(ByRef InOut)
Dim i As Long, J As Long, Low As Long
Dim Hi As Long, Temp As Variant
Low = LBound(InOut)
Hi = UBound(InOut)
J = (Hi - Low + 1) \ 2
Do While J > 0
For i = Low To Hi - J
If InOut(i) > InOut(i + J) Then
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
For i = Hi - J To Low Step -1
If InOut(i) > InOut(i + J) Then
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
J = J \ 2
Loop
End Sub
Public Function SortRow(rng As Range) As String
ReDim ary(1 To rng.Count) As Variant
Dim CH As String, i As Long
CH = Chr(2)
For i = 1 To 6
ary(i) = rng(i)
Next i
Call aSort(ary)
SortRow = Join(ary, CH)
End Function
SortRow()
是一个UDF,它对输入范围的内容进行排序,并在单个单元格中显示结果。
在 G1 中输入:
=SortRow(A1:F1)
并复制下来。在 H1 中输入:
=IF(COUNTIF($G$1:$G$7,G1)=1,"unique combination","duplicates")
并复制下来: