Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Spalten mit gleichen Überschriften untereinander
#21
(24.01.2016, 18: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.
Antworten Top
#22
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
Antworten Top
#23
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:
  • Funkydonkey
Antworten Top
#24
(24.01.2016, 18: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
Antworten Top
#25
(24.01.2016, 19: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
Antworten Top
#26
Hallo snb,

tolle Lösung. Thumps_up


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
Antworten Top
#27
(24.01.2016, 20: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
Antworten Top
#28
Hallo,

erstze
Code:
Sheet1

mit

Code:
Tabelle1


Dann schau Dir einmal das Ergebnis an, ob es passt.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Funkydonkey
Antworten Top
#29
(24.01.2016, 19: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? :)
Antworten Top
#30
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:
  • Funkydonkey
Antworten Top


Gehe zu:


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