Daten einlesen von Tab1 auf Tab2
#1
Hallo zusammen,

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.

Freue mich über Lösungsvorschläge.

Viele Grüße Medina


Angehängte Dateien
.xlsx   Beispielmappe.xlsx (Größe: 11,49 KB / Downloads: 10)
Top
#2
Hallöchen,

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)
Top
#3
Hallo schauan,

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).

Grüße Medina


Angehängte Dateien Thumbnail(s)
   
Top
#4
Hallo Medina,

Frankreich ist ja nun doppelt, oder nicht? Was käme denn in dem Fall raus?
Tabellenblattname: Zieldarstellung
ABCD
2Frankreich
Belgien
PR1
PR2
PR4
PR5
Produkt1Regel1
Regel2
Regel3
Regel4


© schauan
oder in dem
Tabellenblattname: Zieldarstellung
ABCD
2Belgien
Frankreich
PR1
PR2
PR4
PR5
PR9
Produkt1Regel1
Regel2
Regel3
Regel4


© schauan
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Hallo schauan,

ich versteh nicht ganz, was du meinst. Das ist das Blatt Zieldarstellung, also das Endergebnis. Da soll nichts mehr raus kommen?! ;)

Grüße Medina
Top
#6
Hallöchen,

oh wie peinlich, da hab ich die Blätter verwechselt Sad 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)
Top
#7
Also wenn du die Quelltabelle meinst: Unter dem Land (Spalte A), Produktvariante (B) und Produkt © sind keine Leerzeilen. Die Werte werden nur in der Schriftfarbe weiß weitergeschrieben, bis ein neuer Datensatz kommt. Dies ist notwendig, da die Datensätze noch filterbar sein müssen (sonst würde ja nur eine Zeile in Spalte D gefiltert werden und die restlichen Regeln würden wegfallen).
Hat der Datensatz in Zeile 2 Frankreich - PR1 - Produkt1  fünf Regeln in Spalte D stehen, dann würden dementsprechend unter den Datensätze in Zeile 5 Belgien und Zeile 8 Frankreich "vier Leerzeilen" stehen.

Grüße Medina
Top
#8
Hallo Medina,

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:
  • Medina
Top
#9
Vielen Dank schon mal, schauan! Ich teste das Ganze morgen mal und geb dann Rückmeldung.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste