我有一个excel电子表格,其中包含2列,用于指示2个顶点(服务器)之间的关系。不幸的是,列太多了,所以有A,B和B,A条。我需要摆脱那些冗余的条目。有人可以提供功能吗?
示例:
更喜欢将输出分开,但如果它修改了相同的输入列,则表示没问题。
答案 0 :(得分:1)
通过回答这个问题,我希望它能为您提供一个理解基础的起点或想法,并在下次提出您的半工作解决方案。
没有VBA:
您可以比较字符串。在小区D2中 - &gt; =IF(A2<B2,A2,B2)
为您提供两个字母中的第一个字母。同样的事情发生在E2 - &gt; =IF(A2<B2,B2,A2)
。将这些公式复制到最后,然后将它们复制/粘贴为值,然后从数据功能区中删除重复项。
使用VBA:
您可以再次使用比较对字母重新排序,然后将它们连接在两者之间。然后检查它们是否存在于您的字典中,如果它们不存在则将它们添加到字典中。您可以将它们写入流程中的工作表单元格,也可以稍后从字典中提取它们:
Sub removeDub()
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Dim i As Long
Dim s1, s2 As String
'Dim a() As String
With Sheets("Sheet1")
For i = 2 To .Range("A1").End(xlDown).Row
If Cells(i, 1).Value < Cells(i, 2).Value Then
s1 = .Cells(i, 1).Value
s2 = .Cells(i, 2).Value
Else
s1 = .Cells(i, 2).Value
s2 = .Cells(i, 1).Value
End If
If Not dict.Exists(s1 & "," & s2) Then
dict.Add s1 & "," & s2, 1
.Range("D" & .Cells.Rows.Count).End(xlUp).Offset(1) = s1
.Range("E" & .Cells.Rows.Count).End(xlUp).Offset(1) = s2
End If
Next i
'For Each Key In dict.Keys
' a = Split(Key, ",")
' .Range("D" & .Cells.Rows.Count).End(xlUp).Offset(1) = a(0)
' .Range("E" & .Cells.Rows.Count).End(xlUp).Offset(1) = a(1)
'Next Key
End With
End Sub