463 Aufrufe
Gefragt in Tabellenkalkulation von
Guten Abend zusammen,

bestimmt könnt ihr mir helfen. Ich beschäftige mich erst seit kurzem mit VBA und, auch wenn ich mittlerweile das Gefühl habe es einigermaßen lesen zu können, kann ich es (leider) mitnichten sprechen.

Folgendes möchte ich gerne per VBA lösen/gelöst haben:

In Spalte A sind mehrere Werte stellenweise doppelt vorhanden. Ist dies der Fall, soll in Spalte C eine Ausgabe der sich in Spalte B befindlichen Daten mit Kommata getrennt wiedergegeben werden. Befindet sich in Spalte A hingegen kein doppelter Wert soll in Spalte C der Wert aus Spalte B wiedergegeben werden.

Beispiel:

Spalte A-------------Spalte B-------------Spalte C (Ergebnisspalte)
10021----------------a65gh----------------a65gh,89uh
10021----------------89uh-----------------a65gh,89uh
10050----------------9ww------------------9ww
10051----------------uio0l3---------------uio013
10078----------------lö876----------------lö876,873r
10078----------------873r-----------------lö876,873r
10079----------------äu59-----------------äu59
...------------------...------------------...

Bitte sagt mir, dass ihr dafür eine Lösung habt...

Vielen Dank schon einmal.

3 Antworten

0 Punkte
Beantwortet von
Hallo Nachtschwaermer,

gib in C2 und C3 nachfolgende Formel ein:

=WENN((A2=A3);B2&"," & B3;"")

markiere C2 und C3 und gemeinsam runterkopieren bis?

Gruß
Paul1
0 Punkte
Beantwortet von
Hallo nochmal,

die Formel funktioniert leider nur in der Reihenfolge Deines Beispiels, wenn die Zahlenfolge anders aufgestellt ist, geht es leider nimmer.

Leider ist mir bis jetzt nichts anderes eingefallen, sorry

Gruß
Paul1
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

das folgende Makro gehört in ein Standard-Modul deiner Arbeitsmappe. Ich gehe davon aus, dass in der ersten Zeile deiner Tabelle Überschriften stehen:

Sub zusammen()

Dim lngLetzte As Long
Dim varFeld As Variant
Dim varAusgabe As Variant
Dim lngZaehler As Long
Dim a As Long
Dim f As Long
Dim bvorhanden As Boolean
Dim lngZeile As Long

'letzte Zeile in Spalte A des aktiven Blattes ermitteln
lngLetzte = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

'Ausgabefeld dimensionieren; in Zeile 1 des Arbeitsblatten stehen Überschriften, daher verringern
ReDim varAusgabe(lngLetzte - 1, 1)

'Spalten A und B ab Zeile 2 in varFeld einlesen
varFeld = ActiveSheet.Range(Cells(2, 1), Cells(lngLetzte, 2))

'Nun das Feld durchlaufen
For f = 1 To UBound(varFeld)
'Marker auf falsch setzen
bvorhanden = False
For a = 0 To UBound(varAusgabe)
If varFeld(f, 1) = varAusgabe(a, 0) Then
'falls Nummern gleich, dann Spalte B zusammenführen
bvorhanden = True
varAusgabe(a, 1) = varAusgabe(a, 1) & "," & varFeld(f, 2)
Exit For
End If
Next a
'falls Nummer noch nicht vorhanden, Daten in Ausgabefeld schreiben
If bvorhanden = False Then
varAusgabe(lngZaehler, 0) = varFeld(f, 1)
varAusgabe(lngZaehler, 1) = varFeld(f, 2)
lngZaehler = lngZaehler + 1
End If

Next f

'Nun Daten zurück in Tabelle schreiben
For lngZeile = 2 To lngLetzte
For a = 0 To UBound(varAusgabe, 1)
If ActiveSheet.Cells(lngZeile, 1) = varAusgabe(a, 0) Then ActiveSheet.Cells(lngZeile, 3) = varAusgabe(a, 1)
Next a
Next lngZeile

End Sub


Gruß

M.O.
...