这是我目前的尝试:
Sub DeleteRows()
With ActiveSheet
Set Rng = Range("A1", Range("B1").End(xlDown))
Rng.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End With
End Sub
问题是,在转移到第2列之前,这只引用了第1列的重复数据删除。所以
HOME|AWAY|DATE
================
MARK|PAUL|JUNE1
PAUL|MARK|JUNE5
Sara|JOHN|JUNE8
JOHN|SARA|JUNE12
不进行重复数据删除。我想要实现的是我的代码将这些行视为相同,即使它们不是。这样我只有这两个竞争对手在这个月的第一天玩。以下是我正在寻找的最终结果。
HOME|AWAY|DATE
================
MARK|PAUL|JUNE1
Sara|JOHN|JUNE8
希望很清楚我在问什么。我把我的大脑搁浅了一点。我唯一能想到的是一些复杂的方法,通过它我可以翻转列并重复两次重复数据删除。但这似乎效率低下。
答案 0 :(得分:2)
您需要使用组合名称执行另一个列。这个新专栏将按字母顺序对两个名字进行排序,以便Mark始终在Paul和John总是在Sara之前出现。然后在这个新列上重复删除。
伪代码:
For each row in rng
'do a bubble sort on the two names to determine alphabetical order
'enter in a new column as Name Name like: JOHN PAUL
next
'de-duplicate on the new column
基本上这个想法是,如果你有两个玩家,你需要使用冒泡排序来确定哪个是按字母顺序排列的。然后输入它作为MARK PAUL而不是PAUL MARK,这样您的数据就是一致的。当你完成排序过程后,马克总会来到保罗之前。现在您的重复数据删除工作将如您所愿。
冒泡排序后,您的数据将如下所示:
HOME|AWAY|DATE |Sorted names
=============================
MARK|PAUL|JUNE1 |MARK PAUL
PAUL|MARK|JUNE5 |MARK PAUL
Sara|JOHN|JUNE8 |JOHN SARA
JOHN|SARA|JUNE12|JOHN SARA
现在,重复数据删除工作将在新专栏上按预期工作。
编辑:
其实没关系泡泡排序。这个公式就是创建新列所需的全部内容:
=UPPER(IF(B2<A2,B2&"_"&A2,A2&"_"&B2))