Hallo a...,
in der Anlage einmal ein erstes Beispielmakro und hier noch einige Bemerkungen:
A) Die Werte der Spalten A und C müssen jeweils wie im Beispiel aufsteigend sortiert aber nicht eindeutig sein.
B) Da ich ungern mit festen Adressen im Programm arbeite, benötigt es zur Zeit zwei
benannte Zellen (
AnfListe und
AnfAusgabe). Diese können beliebig in der Datei verschoben werden (auch in andere Blätter) ohne das Programm anpassen zu müssen.
C) Das Programm erwartet eine einzeilige Überschrift.
Code:
Private Sub cbTuwat_Click()
Dim lngZeileEin1 As Long
Dim lngZeileEin3 As Long
Dim lngZeileAus As Long
Dim lngZeilen As Long
Dim varListe() As Variant
Dim varAusgabe() As Variant
varListe = ThisWorkbook.Names("AnfListe").RefersToRange.CurrentRegion.Value
lngZeilen = UBound(varListe, 1)
ReDim varAusgabe(1 To 2 * lngZeilen, 1 To 4)
For lngZeileAus = 1 To 4
varAusgabe(1, lngZeileAus) = varListe(1, lngZeileAus)
Next lngZeileAus
lngZeileEin1 = 2
lngZeileEin3 = 2
lngZeileAus = 2
Do While lngZeileEin1 <= lngZeilen Or lngZeileEin3 <= lngZeilen
If lngZeileEin1 <= lngZeilen Then
If lngZeileEin3 <= lngZeilen Then
If varListe(lngZeileEin1, 1) = "" Then
varAusgabe(lngZeileAus, 3) = varListe(lngZeileEin3, 3)
varAusgabe(lngZeileAus, 4) = varListe(lngZeileEin3, 4)
lngZeileAus = lngZeileAus + 1
lngZeileEin1 = lngZeilen + 1
lngZeileEin3 = lngZeileEin3 + 1
Else
If varListe(lngZeileEin3, 3) = "" Then
varAusgabe(lngZeileAus, 1) = varListe(lngZeileEin1, 1)
varAusgabe(lngZeileAus, 2) = varListe(lngZeileEin1, 2)
lngZeileAus = lngZeileAus + 1
lngZeileEin1 = lngZeileEin1 + 1
lngZeileEin3 = lngZeilen + 1
ElseIf varListe(lngZeileEin3, 3) = varListe(lngZeileEin1, 1) Then
varAusgabe(lngZeileAus, 1) = varListe(lngZeileEin1, 1)
varAusgabe(lngZeileAus, 2) = varListe(lngZeileEin1, 2)
varAusgabe(lngZeileAus, 3) = varListe(lngZeileEin3, 3)
varAusgabe(lngZeileAus, 4) = varListe(lngZeileEin3, 4)
lngZeileAus = lngZeileAus + 1
lngZeileEin1 = lngZeileEin1 + 1
lngZeileEin3 = lngZeileEin3 + 1
ElseIf varListe(lngZeileEin3, 3) < varListe(lngZeileEin1, 1) Then
varAusgabe(lngZeileAus, 3) = varListe(lngZeileEin3, 3)
varAusgabe(lngZeileAus, 4) = varListe(lngZeileEin3, 4)
lngZeileAus = lngZeileAus + 1
lngZeileEin3 = lngZeileEin3 + 1
Else
varAusgabe(lngZeileAus, 1) = varListe(lngZeileEin1, 1)
varAusgabe(lngZeileAus, 2) = varListe(lngZeileEin1, 2)
lngZeileAus = lngZeileAus + 1
lngZeileEin1 = lngZeileEin1 + 1
End If
End If
Else
varAusgabe(lngZeileAus, 1) = varListe(lngZeileEin1, 1)
varAusgabe(lngZeileAus, 2) = varListe(lngZeileEin1, 2)
lngZeileAus = lngZeileAus + 1
lngZeileEin1 = lngZeileEin1 + 1
End If
Else
varAusgabe(lngZeileAus, 3) = varListe(lngZeileEin3, 3)
varAusgabe(lngZeileAus, 4) = varListe(lngZeileEin3, 4)
lngZeileAus = lngZeileAus + 1
lngZeileEin3 = lngZeileEin3 + 1
End If
Loop
ThisWorkbook.Names("AnfAusgabe").RefersToRange.CurrentRegion = ""
ThisWorkbook.Names("AnfAusgabe").RefersToRange.Resize(2 * lngZeilen, 4) = varAusgabe
End Sub