AW: 2-dimensionales Array: Doppelte "Zeilen" löschen
20.11.2010 17:21:28
Martin
Hallo Ransi,
vielen Dank für deine Antwort. Ich hatte vergessen die Email-Benachrichtigung zu aktivieren und habe deine Antwort daher leider erst jetzt gelesen. Zwischenzeitlich habe ich - hoffentlich auch erfolgreich - eine eigene Function geschrieben, um in 2-dimensionalen Arrays doppelte Einträge zu löschen:
Function TwinKiller(SourceArr As Variant) As Variant
Dim i As Long, j As Long
Dim Twin As Boolean
Dim TempArr As Variant
ReDim TempArr(LBound(SourceArr, 2) To UBound(SourceArr, 2), LBound(SourceArr, 1) To LBound( _
SourceArr, 1))
'Erste Zeile übertragen
For i = LBound(SourceArr, 2) To UBound(SourceArr, 2)
TempArr(i, LBound(SourceArr, 1)) = SourceArr(LBound(SourceArr, 1), i)
Next i
'Vergleich mit vorherigem Datensatz
For i = LBound(SourceArr, 1) + 1 To UBound(SourceArr, 1)
Twin = True
'Zeilenweise vergleichen
For j = LBound(SourceArr, 2) To UBound(SourceArr, 2)
If SourceArr(i, j) SourceArr(i - 1, j) Then
Twin = False
Exit For
End If
Next j
'Nicht-Doppelte übernehmen
If Twin = False Then
ReDim Preserve TempArr(LBound(TempArr, 1) To UBound(TempArr, 1), LBound(TempArr, 2) _
To UBound(TempArr, 2) + 1)
For j = LBound(SourceArr, 2) To UBound(SourceArr, 2)
TempArr(j, UBound(TempArr, 2)) = SourceArr(i, j)
Next j
End If
Next i
TwinKiller = Application.Transpose(TempArr)
End Function
Für Optimierungsvorschläge meiner Funktion bin ich gerne offen.
Viele Grüße
Martin