Vba 按列(1,2)执行重复数据消除,但也按列(2,1)执行重复数据消除

Vba 按列(1,2)执行重复数据消除,但也按列(2,1)执行重复数据消除,vba,excel,Vba,Excel,这是我目前的尝试: 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|

这是我目前的尝试:

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

希望我的问题很清楚。我已经绞尽脑汁了。我唯一能想到的是一种复杂的方法,通过这种方法,我可以翻转列并重复消除两次。但这似乎效率低下

您需要使用组合名称创建另一列。这个新专栏将按字母顺序对这两个名字进行排序,这样马克总是排在保罗之前,约翰总是排在萨拉之前。然后在此新列上消除重复

伪代码:

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,这样您的数据是一致的。当您完成排序过程后,Mark将始终位于Paul之前。现在,重复数据消除将按预期工作

气泡排序后,数据将如下所示:

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))

=UPPER(如果)(b2)这是一个很难的方法,不是吗?所以这种方法可以消除重复标记,Paul和Paul,标记都一样?谢谢你为我解释清楚。非常感谢!如果有人叫
MA
与叫
RK Paul
的人比赛,就会出现误报。(你可能认为这个例子是虚构的,但实际上在我的公司里有两个人的名字是完全相同的!在一般情况下,这种情况会发生,因为很多人的名字中都有空格。)为了防止出现这种情况,使用分隔符不是空格,而是一个不太可能出现在任何名字中的字符,例如,
MARK#PAUL
@Jean-francoiscorbett使用一个特殊的分隔符是很好的,以防您以后需要拆分名字。此外,如果您有一个名字叫
John MARK
,另一个名字只叫
John
@Jean-FrançoisCorbett不确定你所说的“假阳性”是什么意思;我们只是在做一个排序;名字的长度无关紧要。我们没有做任何类型的阳性/阴性测试。尽管如此,我还是同意这个特殊的角色,但不是因为你提到的原因。我的意思是,使用空格分隔符,“Jean François”和“Xavier”之间的游戏将作为“Jean”和“François Xavier”之间的游戏放在同一个容器中,即使这是四个不同的人,并且您不希望这些游戏放在同一个容器中。这就是为什么您应该使用明确的分隔符——例如,在您现在更正的Excel公式中使用的