05.10.2017, 14:55 (Dieser Beitrag wurde zuletzt bearbeitet: 05.10.2017, 14:56 von michelle5995.)
Hallo zusammen
ich habe folgendes Problem: Die Tabelle, die ich als Anlage angehängt habe, bekomme ich so aus einem Programm. Die Servicearbeiten bzw. gesetzliche Untersuchungen werden jeweils einzeln angezeigt, sodass ich Arbeiten für ein Kennzeichen in mehreren Zeilen habe. Ich möchte jetzt eine Formel erstellen, damit ich all die Arbeiten für ein Fahrzeug in einer Zelle der Spalte I habe (so wie in Zeile 3).
Ich habe schon viel rumgebastelt, mit SVERWEIS, WENN-Formel und VERKETTEN, aber das wollte nicht so ganz, wie ich das gerne hätte.
Naja, so verbinde ich zwar die Zellen miteinander, habe aber keinen Bezug auf das Kennzeichen. Die Verkettung soll ja nur dann entstehen, wenn die Kennzeichen zueinander passen. Und da das eine längere Liste sein wird, muss ich die Formel schon runterkopieren können.
vorschlag: verwende ein zweites tabellenblatt (Zusammenfassung). das vorhandene als datenpool, aus welchem dann alle relevanten daten und die daraus resultierenden (gewünschten) verkettungen im tabellenblatt (Zusammenfassung) generiert werden...
dein anforderungsprofil ist zu ungenau. die frage, die du dir stellen solltest, ist: was will ich erreichen? gehe einmal von deinem ziel aus und überlege, wie und/oder was du anhand deiner Daten darstellen oder verwenden möchtest.
Öffnen des VBA-Editors mit alt-F11, anlegen eines Moduls im Menü "Einfügen -> Modul".
Den Code mit copy/paste in das Fenster einfügen.
Es wird einmalig ein zweites Blatt angelegt. Die Auswertung erfolgt nur für die Spalten G-I, das Ergebnis wird in das neue Blatt geschrieben.
Schaun wir mal, ob du damitzurecht kommst.
Code:
Sub iFen()
If Sheets.Count = 1 Then Sheets.Add 'legt Sheet "Tabelle2" an, falls es noch nicht existiert
With CreateObject("Scripting.Dictionary") lr = Tabelle1.Cells(Rows.Count, "G").End(xlUp).Row Ar = Range("G3:I" & lr) For i = 1 To UBound(Ar) If Ar(i, 3) <> 0 Then Tx = Ar(i, 2) & vbLf & Ar(i, 3) 'falls Spalte I nicht leer wird spalte H und I zusammengefast Else Tx = Ar(i, 2) End If If .exists(Ar(i, 1)) Then .Item(Ar(i, 1)) = .Item(Ar(i, 1)) & "|" & Tx Else .Item(Ar(i, 1)) = Tx End If Next i 'Ausgabe in Tabelle2 Tabelle2.Range("A2").Resize(.Count, 2) = Application.Transpose(Array(.keys, .items)) End With End Sub