Registriert seit: 22.01.2016
Version(en): 2010
24.01.2016, 19:28
(Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2016, 15:46 von Rabe.)
(24.01.2016, 19:19)atilla schrieb: Sollen die Daten aus K21-K38 dann gelöscht werden, oder ...? Danke für die Anwort! Ich freue mich richtig, wenn ichs jetzt vernünftig rüber gebracht habe:) Wenn keine "XDD Daten" vorhanden sind, welche noch an falscher Stelle stehen, und noch an richtige Position (XDD) gesetzt werden können, dann sollte dieser Block K21-K38 leer bleiben, oder aber einfach ein #NA bekommen.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo, jetzt taucht eine neue Frage auf: Zitat:Wenn keine "XDD Daten" vorhanden sind, welche noch an falscher Stelle stehen, Was bedeutet an falscher Stelle? Links - rechts, unten - oben, irgendwo innerhalb des Blattes? Muss innerhalb der gesamten Tabelle nach "XDD" gesucht werden? Stehen diese Bezeichnungen immer von Klammern eingeschlossen und man kann sie auf diese Weise eindeutig identifizieren?
Gruß Atilla
Registriert seit: 29.09.2015
Version(en): 2030,5
24.01.2016, 20:08
(Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2016, 20:08 von snb.)
Code: Sub M_snb() sn = Sheet1.Cells(3, 1).CurrentRegion With CreateObject("scripting.dictionary") For j = 1 To UBound(sn) Step 18 For jj = 2 To UBound(sn, 2) If sn(j + 1, jj) <> "" Then c00 = Split(Split(sn(j + 1, jj), "(")(1), ")")(0) If sn(j + 1, jj) <> "" Then .Item(c00) = .Item(c00) & "|" & Join(Array(sn(j, jj), sn(j + 1, jj), sn(j + 2, jj), sn(j + 3, jj), sn(j + 4, jj), sn(j + 5, jj), sn(j + 6, jj), sn(j + 7, jj), sn(j + 8, jj), sn(j + 9, jj), sn(j + 10, jj), sn(j + 11, jj), sn(j + 12, jj), sn(j + 13, jj), sn(j + 14, jj), sn(j + 15, jj), sn(j + 16, jj), sn(j + 17, jj)), "|") Next Next Sheets.Add.Name = "resultaat" Sheets("resultaat").Cells(1).Resize(, .Count) = .Keys() For j = 1 To .Count sp = Application.Transpose(Split(.items()(j - 1), "|")) Sheets("resultaat").Cells(2, j).Resize(UBound(sp)) = sp Next End With Sheets("resultaat").Columns.AutoFit End Sub
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Funkydonkey
Registriert seit: 22.01.2016
Version(en): 2010
24.01.2016, 20:42
(Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2016, 20:42 von Funkydonkey.)
(24.01.2016, 19:52)atilla schrieb: Hallo,
jetzt taucht eine neue Frage auf:
Was bedeutet an falscher Stelle? Links - rechts, unten - oben, irgendwo innerhalb des Blattes? Muss innerhalb der gesamten Tabelle nach "XDD" gesucht werden? Stehen diese Bezeichnungen immer von Klammern eingeschlossen und man kann sie auf diese Weise eindeutig identifizieren? Nach XDD muss immer nur in der selben Zeile gesucht werden. Genau man kann diese eindeutig identifizieren. Diese stehen immer in Klammern. Ein weiteres Beispiel: Spalte H hat das Merkmal laut Zeile 1: EPS1TR12. In der Zelle H184 (also somit wieder dieser ganze Block: H147-164) befindet sich allerdings wieder ein Block der dort nicht hingehört..>(DPS)--> entweder nach links oder nach rechts muss dieser verschoben werden
Registriert seit: 22.01.2016
Version(en): 2010
24.01.2016, 21:23
(Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2016, 21:23 von Funkydonkey.)
(24.01.2016, 20:08)snb schrieb: Code: Sub M_snb() sn = Sheet1.Cells(3, 1).CurrentRegion With CreateObject("scripting.dictionary") For j = 1 To UBound(sn) Step 18 For jj = 2 To UBound(sn, 2) If sn(j + 1, jj) <> "" Then c00 = Split(Split(sn(j + 1, jj), "(")(1), ")")(0) If sn(j + 1, jj) <> "" Then .Item(c00) = .Item(c00) & "|" & Join(Array(sn(j, jj), sn(j + 1, jj), sn(j + 2, jj), sn(j + 3, jj), sn(j + 4, jj), sn(j + 5, jj), sn(j + 6, jj), sn(j + 7, jj), sn(j + 8, jj), sn(j + 9, jj), sn(j + 10, jj), sn(j + 11, jj), sn(j + 12, jj), sn(j + 13, jj), sn(j + 14, jj), sn(j + 15, jj), sn(j + 16, jj), sn(j + 17, jj)), "|") Next Next Sheets.Add.Name = "resultaat" Sheets("resultaat").Cells(1).Resize(, .Count) = .Keys() For j = 1 To .Count sp = Application.Transpose(Split(.items()(j - 1), "|")) Sheets("resultaat").Cells(2, j).Resize(UBound(sp)) = sp Next End With Sheets("resultaat").Columns.AutoFit End Sub
Ist damit mein Problem gelöst? Wenn ich das in ein Modul schreibe und ausführe kommt leider ein Fehler: Laufzeitfehler 424 Objekt erforderlich
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo snb, tolle Lösung. Hab da vielleicht zu viel versucht rein zu interpretieren. Dass die Blöcke einfach zusammengfasst werden können, habe ich gar nicht gesehen. Ich war darauf fixiert, dass der Aufbau nicht verändert werden darf. @Funkydonkoy snb hat die Blöcke zusammengelegt und sie in die per Code erstellte Tabelle "Resultaat" geschrieben. Es fehlt nur die erste Spalte mit den jahreszahlen. Dabei ist zu beachten, dass er immer von 18 Blöcken, 16 Datumswerten und zwei Überschriftzeilen, ausgeht. Füge den Code in ein Modul ein und starte es. Mehr brauchst Du nicht zu machen. Dann schau Dir das Ergebnis in der Tabelle "Resultaat" an.
Gruß Atilla
Registriert seit: 22.01.2016
Version(en): 2010
24.01.2016, 21:57
(Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2016, 21:57 von Funkydonkey.)
(24.01.2016, 21:32)atilla schrieb: Dass die Blöcke einfach zusammengfasst werden können, habe ich gar nicht gesehen. Ich war darauf fixiert, dass der Aufbau nicht verändert werden darf.
@Funkydonkoy
Dabei ist zu beachten, dass er immer von 18 Blöcken, 16 Datumswerten und zwei Überschriftzeilen, ausgeht. Füge den Code in ein Modul ein und starte es. Mehr brauchst Du nicht zu machen. Dann schau Dir das Ergebnis in der Tabelle "Resultaat" an. Danke für eure Antworten! Was meinst du mit Blöcke zusammenfassen?:) Leider kommt bei mir der genannte Laufzeitfehler. Wenn ich auf Debuggen klicke, springt der gelbe Zeiger in folgende Zeile: sn = Sheet1.Cells(3, 1).CurrentRegion
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo, erstze mit Dann schau Dir einmal das Ergebnis an, ob es passt.
Gruß Atilla
Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• Funkydonkey
Registriert seit: 22.01.2016
Version(en): 2010
24.01.2016, 22:09
(Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2016, 15:49 von Rabe.
Bearbeitungsgrund: Zitat auf Relevantes reduziert
)
(24.01.2016, 20:08)snb schrieb: Dann schau Dir einmal das Ergebnis an, ob es passt. Genial! Einfach Wahnsinn.. Vielen Dank euch beiden! Auf den ersten Blick ist es perfekt. Da bekommt man Lust sich mit VBA zu beschäftigen. Ist es möglich dieses Makro komplett auf alle Zeilen/Zellen zu übertragen, oder ist das schon? Es kommen nämlich noch massig neue Merkmale in weitere Spalten. Ließt das Makro die Werte in den Klammern aus und vergleich diese dann mit der Zeile 1? Wie genau funktioniert das? :)
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo,
snb vergleicht nicht.
Ich kann es nur im Groben beschreiben.
Die Werte in Zeile 1 bilden einen Schlüssel. Dann werden in 18 Schritten ab Zeile 3 die Klammerausdrücke in der Zeile herausgelesen und dem passenden Schlüssel aus Spalte 1 angefügt.
Neue Zeilen und spalten werden insofern mit einbezogen, wenn die Daten immer in 18 er Blöcken untereinander stehen. Da er ja immer beginnend ab der Zeile 3jede 18 Zeile durchläuft.
Das könnte man aber auch leicht dynamisch aufziehen, in dem man die Schrittweite berechnet. Z.B Max(Jahreszahl) - Min( Jahreszahl) + 2 (zwei Überschriftzeilen)
Gruß Atilla
Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• Funkydonkey
|