2017-05-02 28 views
-2

2つの頂点(サーバー)間の関係を決定する2列のスプレッドシートがあります。残念ながら、列が多すぎるので、エントリA、B、B、Aがあります。私はそれらの余分なエントリを取り除く必要があります。誰かが機能を提供することはできますか?VBAは無向グラフを作成します

例:

enter image description here

が分離されるべき出力を好むだろうが、それは同じ入力列を修正した場合、それは大丈夫です。

答えて

1

この質問に答えることで、基本的なことを理解し、次回の半分の作業の解決策を考え出すための出発点またはアイデアが得られれば幸いです。 VBAなし

あなたは文字列を比較することができます。セルD2 - >=IF(A2<B2,A2,B2)では、2文字のうちアルファベットの最初の文字が表示されます。同じことがE2 - >=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 
+0

ありがとうございます! :) –

関連する問題