Office: Daten Horizontal nach Vertikal ändern aber aufgeschlüsselt

Helfe beim Thema Daten Horizontal nach Vertikal ändern aber aufgeschlüsselt in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Artikelnummern ganz ohne Merkmalwert fallen unter den Tisch. Genau das sollen sie aber nicht. Argl... Also doch nicht... Mir fehlte zwar der Sinn für... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von reiner_2006, 15. September 2011.

  1. miriki Erfahrener User

    Daten Horizontal nach Vertikal ändern aber aufgeschlüsselt


    Argl... Also doch nicht... Mir fehlte zwar der Sinn für Artikel-Zeilen ohne Merkmal und ich dachte auch, ich hätte das so verstanden, daß die auch wegfallen könnten... Aber dann...

    Ist aber simpel: Vor der inneren Schleife, die die Zeile durchläuft, setzt man einfach einen Boolean, der beim Kopieren umgedreht wird. Ist am Ende der Schleife der Merker noch im Original, muß man, da keine Mermale vorhanden waren, wenigstens die Artikelnummer kopieren.

    Code:
        y2 = 1
    
        t1 = Now()
        For y1 = 2 To s1.Cells(65536, 1).End(xlUp).Row
            c = True
            For x1 = 2 To s1.Cells(1, 256).End(xlToLeft).Column
                If (Trim$(s1.Cells(y1, x1).Value) <> "") Then
    
                    y2 = y2 + 1
                    s2.Cells(y2, 1).Value = s1.Cells(y1, 1).Value
                    s2.Cells(y2, 2).Value = s1.Cells(1, x1).Value
                    s2.Cells(y2, 3).Value = s1.Cells(y1, x1).Value
                    c = False
    
                End If
            Next x1
            If (c) Then
                y2 = y2 + 1
                s2.Cells(y2, 1).Value = s1.Cells(y1, 1).Value
            End If
        Next y1
    Ich hab mal die 50 Beispiel-Zeilen bis Zeile 4300 kopiert. Bei 254 Spalten (links Artikelnr., rechts eine leere Spalte) und 4.300 Zeilen = 1.092.200 Läufe braucht das Ding 15 Sekunden, um 65112 Zeilen auf dem 2. Blatt zu erzeugen. Mehr krieg ich mit x2000 ja leider nicht hin... Die Zeit ist auch zu kurz, um Auswirkungen von Optimierungen (ich hab nach wie vor das trim$() im Auge) wirklich spürbar messen zu können.

    Gruß, Michael
     
  2. Kallewirsch Erfahrener User
    Hallo Michael,

    Deinen Code habe ich mal, mit kleinen Änderungen an 30000Zeilen ausprobiert und er braucht ca. 10min. Der Code von Achim braucht für die gleiche Konstellation 2min, meiner steigt beim Löschen aus, d.h. er braucht zu lange.


    Gruß

    Edgar
     
    Kallewirsch, 28. September 2011
    #17
  3. miriki Erfahrener User
    Hm, ok, das ist lahm...

    Und wenn Du
    Code:
    If (Trim$(s1.Cells(y1, x1).Value) <> "") Then
    mal gegen
    Code:
    If (not isempty(s1.Cells(y1, x1))) Then
    austauschst? Ist's dann merklich schneller?

    Gruß, Michael
     
  4. fette Elfe Erfahrener User

    Daten Horizontal nach Vertikal ändern aber aufgeschlüsselt

    Hallo Michael und Edgar,
    sry wenn ich mir Eure Codes im Moment nicht näher anschaue bzw. sie ausprobiere.
    Habe gerade ein eklatantes Zeitdefizit.
    Aber ich finde es interessant mit zu lesen. ;O)
    Wenigstens habe ich jetzt das "If Not IsEmpty" auch in der inneren Schleife übernommen.
    So wird wenigstens beide Male auf gleiche Art geprüft.

    Bei der Gelegenheit mal ne Frage:
    Reiners Datei auf 60.000 Zeilen erweitert ergibt bei mir eine Speichergröße von 261.594 KB.
    Diese Datei nach dem Makrodurchlauf, also über 900.000 Zeilen in 3 Spalten in Blatt 2 zusätzlich, ergibt bei mir eine Speichergröße von 277.549 KB.
    Ich hätte einen größeren Unterschied erwartet.



    @ Reiner

    Da ich nicht weiß wie Deine Datei im Detail aussieht (wieviele Blätter hat sie, sind die leer... etc.), habe ich meinen Code jetzt so geändert, dass am Anfang erstmal ein neues Blatt eingefügt wird, auf welches die umgestellten Daten geschrieben werden.
    Zusätzlich wird bei erreichen der maximalen Zeilenanzahl erneut ein neues Blatt eingefügt, und die umgestellten Daten werden dort weiter geschrieben.
    Dies würde sich bei Bedarf so oft wiederholen wie nötig.
    Die Zeilenbegrenzung ist also kein Problem mehr, nur könnte es für Dich jetzt zum Problem beim einlesen der Daten werden, wenn diese auf mehreren Blättern verteilt sind.

    Dazu bitte mal äußern.


    Code:
    Option Explicit
    
    Public Sub DatenUmstellen()
        
        Dim wksQuelle As Worksheet
        Dim wksZiel As Worksheet
        
        Dim intLetzte As Integer
        Dim intCounter As Integer
        Dim loLetzte As Long
        Dim loZeile As Long
        Dim locounter As Long
        Dim loLetzteZeile As Long
        
        Set wksQuelle = Worksheets(1)
        Set wksZiel = Worksheets.Add(after:=Worksheets(Worksheets.Count))
        
        wksZiel.Cells(1, 1) = "Artikelnummer"
        wksZiel.Cells(1, 2) = "Merkmal"
        wksZiel.Cells(1, 3) = "Wert"
        loZeile = 2
        
        With wksQuelle
            
            loLetzteZeile = .Rows.Count
            
            loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
            For locounter = 2 To loLetzte
                
                intLetzte = IIf(IsEmpty(.Cells(locounter, .Columns.Count)), .Cells(locounter, .Columns.Count).End(xlToLeft).Column, .Columns.Count)
                If intLetzte = 1 Then
                    wksZiel.Cells(loZeile, 1) = .Cells(locounter, 1)
                    loZeile = loZeile + 1
                Else
                    For intCounter = 2 To intLetzte
                        If Not IsEmpty(.Cells(locounter, intCounter)) Then
                            wksZiel.Cells(loZeile, 1) = .Cells(locounter, 1)
                            wksZiel.Cells(loZeile, 2) = .Cells(1, intCounter)
                            wksZiel.Cells(loZeile, 3) = .Cells(locounter, intCounter)
                            loZeile = loZeile + 1
                        End If
                        If loZeile = loLetzteZeile Then
                            Set wksZiel = Worksheets.Add(after:=Worksheets(Worksheets.Count))
                            wksZiel.Cells(1, 1) = "Artikelnummer"
                            wksZiel.Cells(1, 2) = "Merkmal"
                            wksZiel.Cells(1, 3) = "Wert"
                            loZeile = 2
                        End If
                    Next intCounter
                End If
           Next locounter
        End With
    End Sub
     
    fette Elfe, 28. September 2011
    #19
  5. miriki Erfahrener User
    Argl, da ist noch ein anderer klitzekleiner Schreibfehler drin!

    Code:
    For x1 = 2 To s1.Cells(1, 256).End(xlToLeft).Column
    prüft ja jede Zeile so weit bis rechts, wie es Überschriften (Zeile 1) gibt. Das war so nicht geplant. Jede Zeile sollte nur bis zum jeweils letzten Wert in der aktuellen Zeile durchlaufen werden:
    Code:
    For x1 = 2 To s1.Cells(y1, 256).End(xlToLeft).Column
    Gruß, Michael
     
Thema:

Daten Horizontal nach Vertikal ändern aber aufgeschlüsselt

Die Seite wird geladen...
  1. Daten Horizontal nach Vertikal ändern aber aufgeschlüsselt - Similar Threads - Daten Horizontal Vertikal

  2. Fehlerhafte Berechnung mit gesetztem Filter

    in Microsoft Excel Hilfe
    Fehlerhafte Berechnung mit gesetztem Filter: Hallo, ich benötige Hilfe für die Berechnung (Tabelle stelle ich mit ein) der Einnahmen, Ausgaben sowie die korrekte Übernahme des Anfangsbestandes sowie Endbestandes. Ich habe eine Tabelle...
  3. Visio Shape-Daten -> Textfelder

    in Sonstiges
    Visio Shape-Daten -> Textfelder: Hallo zusammen, ich möchte gerne Shape-Daten von Shapes, welche ich als Strings/Zeichenketten angelegt habe, mit Textfeldern des Shapes logisch verknüpfen (nicht über die Datengrafik). Kann mir...
  4. Daten von Publisher in PowerPoint übernehmen

    in Microsoft PowerPoint Hilfe
    Daten von Publisher in PowerPoint übernehmen: Hallo zusammen, ich bin gerade dabei meine Dateien aus dem Publisher wegen dem Aus im Oktober 2026 in PowerPoint zu kopieren. Wenn ich dies allerdings z. B. mit einem formatierten Text versuche,...
  5. Daten aus mehreren Blättern nach Datums einträgen suchen

    in Microsoft Excel Hilfe
    Daten aus mehreren Blättern nach Datums einträgen suchen: Hallo zusammen, ich habe in einer Excel merere Blätter (maschinen) mit Einträgen( Datum, Arbeitszeit, Produktionsausfall, Störung und Maßnahme) nun möchte ich ein Dahsboard bauen in dem man das...
  6. Ausgewählte Daten einer Excelzelle Summieren Office 2021

    in Microsoft Excel Hilfe
    Ausgewählte Daten einer Excelzelle Summieren Office 2021: Hallo Leute ich bin zwar kein Excel-Experte, kann mich aber so durch einfache Formeln schlagen. Nun will ich in einer Anwesenheitsliste die Anwesenheit nach Register (gekennzeichnet durch einen...
  7. Daten anhand bestimmter Kriterien aus anderen Registern übertragen

    in Microsoft Excel Hilfe
    Daten anhand bestimmter Kriterien aus anderen Registern übertragen: Hallo Zusammen, nachdem es das Office Forum wohl leider nicht mehr gibt, bin ich froh euch hier gefunden zu haben. Anbei eine Mustertabelle: In dem Register Übersicht werden die Tarifdaten von...
  8. Aus PDF importierte Daten einfach sortieren

    in Microsoft Excel Hilfe
    Aus PDF importierte Daten einfach sortieren: Hallo zusammen, ich bin relativ unbedarft und neu bei Excell. Wenn ich deshalb das bereits bestehende Thema nicht gefunden haben sollte: sorry. Ich habe ein Ausgabedokument (PDF) einer...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden