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. 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...
  3. Fehler beim speichern von Daten über ein Formular

    in Microsoft Access Hilfe
    Fehler beim speichern von Daten über ein Formular: Guten Morgen zusammen, ich habe ein Problem mit einer SQL Servertabelle, diese war bisher als Abfrage oder direkt als RS eines Formulars. Wenn nu n Daten geändert wurden, gab es oft, nicht immer,...
  4. Daten Einlesen aus mehre Zellen in Verbindung einer Verbundene Zelle

    in Microsoft Excel Hilfe
    Daten Einlesen aus mehre Zellen in Verbindung einer Verbundene Zelle: Moin Allerseits, mit Verlaub ich bin seit 5 Jahren aus der Materie raus, fange somit von Vorne an. Frage: Anpassung eines bereits Geschrieben Codes. Verwendete Elemente: Quelle> Tabelle "wsLK",...
  5. Excel icon fehlt

    in Microsoft Excel Hilfe
    Excel icon fehlt: Hallo zusammen ich habe das Icon aus Datei nicht um Daten abzurufen [ATTACH] was kann ich tun? bei Daten zusammenführen ist es vorhanden - ich möchte eigentlich alle Tabellenblätter in eine...
  6. Excel Zusammenführen

    in Microsoft Excel Hilfe
    Excel Zusammenführen: Guten Tag Sub Tabelle_zusammenführen() Dim i As Integer Dim Zusammenfassung As Worksheet Dim BereichZielTab As Range Set Zusammenfassung = Worksheets("Zusammenfassung") For i = 2...
  7. Arr sind Null obwohl Daten vorhanden sind

    in Microsoft Excel Hilfe
    Arr sind Null obwohl Daten vorhanden sind: Hallo zusammen Erst mal frohe Festtage ;-) Ich hab ein Problemchen... In einer Abfrage eröffne ich mit einem "Connection.Open..:" eine Query Anschliessend mit rs.Open,(vobei mein RS ein...
  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