habe im Anhang eine Mappe angehängt. Darin sind 2 Tabellen enthalten, eine Tabelle "Quelle" mit den Ausgangsdaten und eine Tabelle "Zieldarstellung" mit der gewünschten Darstellung der Daten. Zu Tabelle "Quelle": Es gibt mehrere solcher Quelltabellen, die nach dem Einlesen der Daten auf das Sheet "Zieldarstellung" gelöscht werden, die nach und nach dann an die schon eingelesenen Daten angeheftet werden. Die Beschreibung in Spalte D gehört so lange zu den Datensätzen aus Spalte A, B, C bis eine neue Beschreibung in Spalte D vorkommt. Der Inhalt der Zellen D2-D4 gilt quasi auch für die Datenzeilen 5-7 und 8-10 usw... Die Werte aus den Spalten A-C lasse ich solange in Schriftfarbe weiß weiterschreiben, bis ein neuer Datensatz beginnt (für Filterung).
Zu Tabelle "Zieldarstellung": Die Daten müssten nun so wie abgebildet dargestellt werden. In den Spalten sollten auch keine Duplikate vorkommen.
Die Darstellung der Datensätze in dieser Form ist leider Vorgabe. Die Umsetzung solllte vllt. mit einem ?Array? stattfinden, nur fehlt mir da leider grad der Durchblick, wie ich mein Array aufbauen sollte.
mir ist beim Übernehmen der Daten noch unklar, wie Du im Ziel die Länder verteilst. Warum gibt es da Frankreich 1x, und wenn das kein Fehler ist, wieso Belgien nicht auch? Wie würde das bei 3 Ländern und 7 Produktvarianten aussehen? Kannst Du dazu mal eine eindeutige Regel definieren?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
vielen Dank erstmal, dass du dich der Thematik annimmst ;).
1. Es sollen keine Duplikate bei den Ländern in Spalte A in der Zieltabelle vorkommen. Und da die "Regel1, Regel2, Regel" in den Zellen D2-4 auch für die Datensätze in A5-C5 und A8-C8 zutreffen, sollte in der Zieltabelle 1x Frankreich und 1x Belgien stehen. "Regel1, Regel2, Regel3" gelten so lange für die Datensätze in den Spalten A, B, C bis eine neue Regel in Spalte D vorkommt. Dies trifft für die anderen Regeln in Spalte D auch zu.
Habe dazu mal eine Datei angehängt, wie man sich das vorstellen kann (rot markierten Zeilen).
oh wie peinlich, da hab ich die Blätter verwechselt Schau ich morgen Abend noch mal drüber ... Wie viele leere Zeilen unter Belgien (Zeile 5) und Frankreich (Zeile 8) stehen, spielt keine Rolle, nehme ich an?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
mit diesem Code könnte es so etwa klappen. Es gibt nur noch einen kleinen Makel. Beim ersten Frankreich steht unsichtbar PR2 und PR3, das übernimmt der Code mit. Ich habe erst mal nur in Spalte A auf die unsichtbaren geachtet. Wenn's soweit passt, kommt das morgen Abend.
Code:
Option Explicit Option Base 1
Sub QuelleZiel() 'Variablendeklarationen 'Integer Dim iCnt% 'Long Dim lCnt&, lRow&, lIndex& 'Variant-Array Dim arrTarget 'letzte belegte zeile anhand letztem Eintrag in Spalte A feststellen lRow = Cells(Rows.Count, 1).End(xlUp).Row ReDim arrTarget(lRow, 4) 'ersten Datensatz bilden arrTarget(1, 1) = Cells(2, 1) arrTarget(1, 2) = Cells(2, 2) arrTarget(1, 3) = Cells(2, 3) arrTarget(1, 4) = Cells(2, 4) 'Arrayindexzaehler auf 1 setzen lIndex = 1 'Schleife ueber belegte Zeilen For lCnt = 3 To lRow 'Wenn ein anderes Land kommt oder das gleiche Land nochmal sichtbar ist, dann If Cells(lCnt, 1) <> Cells(lCnt - 1, 1) Or _ (Cells(lCnt, 1) = Cells(lCnt - 1, 1)) And (Cells(lCnt, 1).Font.Color <> 16777215) Then 'Wenn eine neue Beschreibung kommt, dann neue Zsammenstellung bilden If Cells(lCnt, 4) <> "" Then 'Arrayindexzaehler hochsetzen lIndex = lIndex + 1 'neuen Datensatz beginnen arrTarget(lIndex, 1) = Cells(lCnt, 1) arrTarget(lIndex, 2) = Cells(lCnt, 2) arrTarget(lIndex, 3) = Cells(lCnt, 3) arrTarget(lIndex, 4) = Cells(lCnt, 4) 'wenn weiter Beschreibung kommt Else 'Land hinzufuegen, wenn noch nicht drin If InStr(1, arrTarget(lIndex, 1), Cells(lCnt, 1)) = 0 Then _ arrTarget(lIndex, 1) = arrTarget(lIndex, 1) & Chr(10) & Cells(lCnt, 1) 'Schleife ueber Spalte 2 bis 4 For iCnt = 2 To 4 'Wenn was anderes drin steht, dann If Cells(lCnt, iCnt) <> Cells(lCnt - 1, iCnt) And Cells(lCnt, iCnt) <> "" Then 'Daten hinzufuegen, wen noch nicht drin If InStr(1, arrTarget(lIndex, iCnt), Cells(lCnt, iCnt)) = 0 Then _ arrTarget(lIndex, iCnt) = arrTarget(lIndex, iCnt) & Chr(10) & Cells(lCnt, iCnt) 'Ende Wenn was anderes drin steht, dann End If 'Ende Schleife ueber Spalte 2 bis 4 Next 'Ende Wenn eine neue Beschreibung kommt, dann neue Zsammenstellung bilden End If 'oder bei gleichem Land nur Folgespalten hinzufuegen Else 'Schleife ueber Spalte 2 bis 4 For iCnt = 2 To 4 'Wenn was anderes drin steht, dann If Cells(lCnt, iCnt) <> Cells(lCnt - 1, iCnt) And Cells(lCnt, iCnt) <> "" Then 'Daten hinzufuegen, wen noch nicht drin If InStr(1, arrTarget(lIndex, iCnt), Cells(lCnt, iCnt)) = 0 Then _ arrTarget(lIndex, iCnt) = arrTarget(lIndex, iCnt) & Chr(10) & Cells(lCnt, iCnt) 'Ende Wenn was anderes drin steht, dann End If 'Ende Schleife ueber Spalte 2 bis 4 Next End If Next Sheets("Zieldarstellung").Cells(2, 1).Resize(UBound(arrTarget), 4) = arrTarget End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • Medina