Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellen per VBA Lösung transponieren

Forumthread: Zellen per VBA Lösung transponieren

Zellen per VBA Lösung transponieren
26.09.2003 14:32:39
Ingrid Maier
Hallo miteinander,

bin noch ratlos........

Habe eine Datei mit ca. 50.000 Datensätze (Zeilen) in 6 Spalten,
manche Datensätze kommen mehrfach vor. Die mehrfachen Datensätze muss ich jeweils in die 7. Spalte in die Zeile des ersten mehrfachen Datensatzes transponieren.

Bis jetzt habe ich es mit der Teilsumme, Anzahl, gelöst, d.h. ich habe in die neu erstellte Teilsummenzeile die Daten mit der Formel ....=A2, =B2, =B3, =B4, =B5, =B6, =A3, =B3 usw. "kopiert", dann die Gruppierung geschlossen und alle sichtbaren Zeilen und in eine neue Datei kopiert. Ging eigentlich recht flott, leider habe aufgrund der Dateigröße vergessen, ein paar Formeln einzufügen und habe somit einige Datensätze nicht mitkopiert...

Die Suche nach diesen Zellen ist einfach unwürdig, gehts auch anders???

Gruß Ingrid
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen per VBA Lösung transponieren
26.09.2003 15:36:05
Marc
Hallo Ingrid,

bei dieser Anzahl (50.000) ist die Frage, ob Datensätze entweder komplett gleich sind oder sich auch nur in einer Zelle unterscheiden können.

Das würde ich wohl eher "zu Fuss" lösen .
Wenn du bereits ne Indizierung hast (falls die Reihenfolge wichtig ist), gut, wenn nicht, würde ich vorne ne Spalte einfügen und die Datensätze durchnummerieren (mittels Autoausfüllen schnell erledigt)

Danach die komplette Matrix markieren und nach den ersten drei (ohne Indizierung) Spalten sortieren lassen, dann das Ganze einmal durchscrollen die doppelten nach rechts rauskopieren, die Matrix wieder nach den Indizes sortieren lassen und die (evtl. eingefügte) Indexspalte wieder rauslöschen.

Dürfte das schnellste sein.

Gruss,
Marc
Anzeige
AW: Zellen per VBA Lösung transponieren
26.09.2003 17:38:27
Ingrid
Hallo Mark,

erst einmal Danke für Deine Antwort, kann aber mit der Sortiererei nix anfangen
Tabelle sieht so aus:

https://www.herber.de/bbs/user/1178.xls

Gibts vielleicht doch ein klitzekleines Makro?

Gruß Ingrid
Anzeige
Zwei Fragen noch...
26.09.2003 17:45:54
Marc
Hallo Ingrid,

ist Spalte A tatsächlich so vorsortiert ? (dann wäre es rel. einfach zu realisieren, denke ich)
Und existiert die Spalte B so ? Wenn ja, was enthält die, oder sind die fortlaufenden Werte von Dir nur zur Markierung eingetragen ?

Grüsse,
Marc
AW: Zwei Fragen noch...
26.09.2003 18:20:53
Ingrid
Hallo Marc,

die Datei stammt aus SAP und ist bereits von SAP sortiert.
Auch sind die mehrfach vorhandenen Datensätze bereits durchnummeriert!

Gibts Hoffnung für mich?
Gruß Ingrid
Anzeige
So müsste es gehen ...
27.09.2003 12:30:38
Marc
Hallo Ingrid,

mit foldendem Code müsste es gehen, funktioniert zumindestens mit deiner Beispieldatei.
Als Anmerkung für alle Profis hier, ich bin noch relativer Anfänger, was VBA angeht, d.h. der Code kann sicherlich noch optimiert werden, aber er läuft...


Sub Umsortieren()
Dim i
Dim ende As Boolean
ende = False
Range("B2").Select                      'Wenn die Tabelle keine Überschrift hat, auf B1 setzen
Do While ende = False                   'Die erste leere Zelle in Spalte B führt zum Abbruch
If ActiveCell.Value <> "" Then
If ActiveCell.Value > 1 Then          'Überprüfung, ob doppelt (an der Nummerierung)
i = (ActiveCell.Value) * 5
Debug.Print i
ActiveCell.Range("A1:E1").Select                        'Kopieren
Selection.Copy
ActiveCell.Offset(-1, (i - 5)).Range("A1").Select       'Aufsuchen der richtigen Zelle mittels des Eintrages in B
ActiveSheet.Paste                                       'Einfügen
ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select    ' &
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp                            ' Löschen
ActiveCell.Offset(0, 1).Range("A1").Select
Else
ActiveCell.Offset(1, 0).Activate
End If
Else
ende = True
End If
Loop
End Sub


Anhand des Wertes in der Zelle B wird errechnet, wieviele Zellen nach rechts gegangen werden muss, um die Zwellen an die richtige Stelle einzufügen.

Bei Fragen stehe ich ab Montag wieder zur Verfügung.
Viel Erfolg !

Grüsse,
Marc
Anzeige
AW: So müsste es gehen ...
29.09.2003 11:38:51
Ingrid
Hallo Marc, vielen Dank, klappt fantastisch!!!

Gruß Ingrid
Das freut mich...
29.09.2003 11:48:20
Marc
... dass ich auch mal was zurückgeben kann hier !!!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Zellen mit VBA transponieren


Schritt-für-Schritt-Anleitung

Um Zellen in Excel per VBA zu transponieren, folge diesen Schritten:

  1. Öffne die Excel-Datei: Stelle sicher, dass deine Datei mit den Datensätzen geöffnet ist.

  2. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  3. Einfügen eines neuen Moduls: Klicke im Menü auf Einfügen und wähle Modul.

  4. Füge den folgenden Code ein:

    Sub Umsortieren()
       Dim i
       Dim ende As Boolean
       ende = False
       Range("B2").Select                      ' Wenn die Tabelle keine Überschrift hat, auf B1 setzen
       Do While ende = False                   ' Die erste leere Zelle in Spalte B führt zum Abbruch
           If ActiveCell.Value <> "" Then
               If ActiveCell.Value > 1 Then          ' Überprüfung, ob doppelt (an der Nummerierung)
                   i = (ActiveCell.Value) * 5
                   Debug.Print i
                   ActiveCell.Range("A1:E1").Select                        ' Kopieren
                   Selection.Copy
                   ActiveCell.Offset(-1, (i - 5)).Range("A1").Select       ' Aufsuchen der richtigen Zelle mittels des Eintrages in B
                   ActiveSheet.Paste                                       ' Einfügen
                   ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select    ' &
                   Application.CutCopyMode = False
                   Selection.Delete Shift:=xlUp                            ' Löschen
                   ActiveCell.Offset(0, 1).Range("A1").Select
               Else
                   ActiveCell.Offset(1, 0).Activate
               End If
           Else
               ende = True
           End If
       Loop
    End Sub
  5. Führe das Makro aus: Schließe den VBA-Editor und drücke ALT + F8, wähle Umsortieren aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: Das Makro läuft nicht: Stelle sicher, dass die Zellen in Spalte B korrekt nummeriert sind und dass deine Daten in der richtigen Reihenfolge vorliegen.
  • Fehler: Ungültige Verweise: Überprüfe, dass die Range-Angaben im Code korrekt sind und dass deine Daten in den angegebenen Spalten vorhanden sind.
  • Leere Zellen verursachen Probleme: Stelle sicher, dass keine leeren Zellen in der betrachteten Spalte vorhanden sind, da dies das Makro zum Stoppen bringen kann.

Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch die folgenden Methoden ausprobieren:

  • Teilsummen und manuelles Kopieren: Verwende die Teilsummen-Funktion und kopiere die Daten manuell in die gewünschten Zellen. Diese Methode ist jedoch zeitaufwendig und fehleranfällig, insbesondere bei großen Datensätzen.
  • Pivot-Tabellen: Erstelle eine Pivot-Tabelle, um die Daten zu aggregieren und die Struktur zu ändern. Dies kann in einigen Fällen eine einfache Lösung sein, erfordert jedoch ein gewisses Verständnis von Pivot-Tabellen.

Praktische Beispiele

Angenommen, du hast folgende Daten:

A B C D E F
1 1 X
1 1 Y
2 2 X
2 2 Z

Nach Ausführung des VBA-Codes solltest du die Daten in der 7. Spalte transponiert sehen, wobei die Werte entsprechend der Nummerierung in Spalte B angeordnet sind.


Tipps für Profis

  • Optimierung des VBA-Codes: Wenn du mehr Erfahrung mit VBA hast, kannst du den Code effizienter gestalten, indem du beispielsweise Range-Objekte speicherst und die Anzahl der Select-Befehle reduzierst.
  • Fehlerbehandlung einbauen: Füge Fehlerbehandlungsroutinen hinzu, um das Makro robuster zu machen und unerwartete Fehler besser zu handhaben.
  • Regelmäßige Sicherungen: Erstelle regelmäßige Backups deiner Daten, bevor du große Änderungen vornimmst, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, wenn ich mehr als 6 Spalten habe?
Du kannst die Range-Angaben im VBA-Code anpassen, um zusätzliche Spalten zu berücksichtigen.

2. Funktioniert das auch in Excel für Mac?
Ja, das VBA-Makro sollte sowohl in der Windows- als auch in der Mac-Version von Excel funktionieren, solange die VBA-Umgebung verfügbar ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige