我能够让它为我工作,所以我想我会发布我的答案,希望能帮助别人。正如我所怀疑和 Quailia 建议的那样,VBA 是要走的路。
在此过程中几乎没有什么变化。我需要在表中添加一个额外的列,因为确定我需要保留一些重复项。第一列中的值现在将行组合在一起,因此保留了以后的重复项。我需要检查重复对的值在第 2 列和第 3 列中。
表1:
| Column1 |
Column2 |
Column3 |
| 01 |
A |
D |
| 01 |
A |
C |
| 01 |
B |
C |
| 01 |
C |
B |
| 01 |
C |
A |
| 01 |
D |
A |
另外,我意识到我将处理固定数量的行,因此我不需要不断更改数组的大小。
Sub RemoveDuplicatePairs()
'Checks a 3 column table for rows with duplicate values when column 2 and 3 are swapped, removes duplicates and outputs unique rows to a new table
Dim aArrayList() As Variant
Dim bArrayList(1 To 144, 1 To 3) As Variant
Dim aRowNum As Integer, aColNum As Integer, bRowNum As Integer, bColNum As Integer
aArrayList = Range("Table1")
bRowNum = 1
'Loop through rows of 1st array
For aRowNum = 1 To UBound(aArrayList, 1)
If aRowNum = 1 Then
bArrayList(1, 1) = aArrayList(1, 1)
bArrayList(1, 2) = aArrayList(1, 2)
bArrayList(1, 3) = aArrayList(1, 3)
'Debug.Print bArrayList(bRowNum, 1) & aArrayList(bRowNum, 2) & bArrayList(aRowNum, 3)
bRowNum = 2
ElseIf aRowNum > 1 Then
'Check if current row in 1st array already exists in 2nd array by comparing values after flipping 2nd and 3rd column values from 1st array
For i = 1 To bRowNum - 1
If aArrayList(aRowNum, 1) = bArrayList(i, 1) And aArrayList(aRowNum, 2) = bArrayList(i, 3) And aArrayList(aRowNum, 3) = bArrayList(i, 2) Then
'Duplicate pair already exists, move onto next row of 1st array
GoTo SKIP
End If
Next i
'No duplicate found, add row from 1st array to 2nd array
bArrayList(bRowNum, 1) = aArrayList(aRowNum, 1)
bArrayList(bRowNum, 2) = aArrayList(aRowNum, 2)
bArrayList(bRowNum, 3) = aArrayList(aRowNum, 3)
'Debug.Print bArrayList(bRowNum, 1) & bArrayList(bRowNum, 2) & bArrayList(bRowNum, 3)
bRowNum = bRowNum + 1
SKIP:
End If
Next aRowNum
'Write array to new table
Sheets("Sheet1").Range("Table2").Value = bArrayList()
End Sub
表2:
| Column1 |
Column2 |
Column3 |
| 01 |
A |
D |
| 01 |
A |
C |
| 01 |
B |
C |
我确信有一种更简单、更简洁的方法来做同样的事情,但正如我的用户名所暗示的那样,我对此还是很陌生。当然欢迎任何改进或简化我的逻辑的建议。