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

Forumthread: Spalte in Zeile transponieren (mit Makro)

Spalte in Zeile transponieren (mit Makro)
23.03.2016 10:47:13
Christian
Hallo Zusammen,
ich benötige mal wieder eure Hilfe.
Ich möchte gerne eine Exceldatei etwas umbauen mit einem Makro, da ich diese Datei täglich in der Form erhalte.
In der Quelldatei sind Spalte A, B, C, D, E, F, G solange gleich, wie in Spalte H Nummern stehen, die quasi zu der lfd. Nr. (in Spalte A) gehören.
Die Spalten I, J, K sind irrelevant.
Ich bräuchte jetzt quasi die Spalte H transponiert in eine Zeile.
Ziel ist es, in Zeile A jede "lfd. Nrummer" nur noch 1x zu haben.
Ab Spalte N sollen quasi die Zellen aus Zeile H transponiert werden. (Das kann mal 1 Spalte bedeuten, kann aber auch mal 50 oder mehr Spalten bedeuten)
In Spalte M benötige ich die Anzahl der durch die transponierung gefüllten Spalten.
Ich habe mal eine Datei angehängt, mit 2 Mappen. Mappe1 ist der Ursprung und Mappe 2 mein zu erreichendes Ziel.
Ich habe schon ein wenig probiert, aber ich scheitere an der Transponierung bei unterschiedlichen Zeilenzahlen je "lfd. Nummer".
Ich hoffe es kann mir hierbei jemand helfen.
Vielen Dank schonmal vorab!
https://www.herber.de/bbs/user/104553.xls

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte in Zeile transponieren (mit Makro)
23.03.2016 11:02:13
Fennek
Hallo,
es gibt zwei Wege, mit denen du dich annähern kannst.
Mit dem Makrorekorder einfach copy und Inhalte einfügen - transponieren
In vba: application.transpose
Mfg

AW: es geht aber auch ohne VBA mit 3 Formeln! owT
23.03.2016 11:10:06
...
Gruß Werner
.. , - ...

AW: Spalte in Zeile transponieren (mit Makro)
23.03.2016 11:10:33
ChrisL
Hi Christian
Sub t()
Dim WS1 As Worksheet, WS2 As Worksheet
Dim iZeile As Long, tempZeile As Variant
Set WS1 = Worksheets("Ursprung")
Set WS2 = Worksheets.Add
WS2.Range("A1:AE1") = "div. Titel"
For iZeile = 2 To WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row
tempZeile = Application.Match(WS1.Cells(iZeile, 1), WS2.Columns(1), 0)
If IsNumeric(tempZeile) Then
WS2.Range("IV" & tempZeile).End(xlToLeft).Offset(0, 1) = WS1.Cells(iZeile, 8)
Else
tempZeile = WS2.Cells(WS2.Rows.Count, 1).End(xlUp).Row + 1
WS2.Range(WS2.Cells(tempZeile, 1), WS2.Cells(tempZeile, 11)).Value = _
WS1.Range(WS1.Cells(iZeile, 1), WS1.Cells(iZeile, 11)).Value
WS2.Cells(tempZeile, 14) = WS1.Cells(iZeile, 8)
End If
WS2.Cells(tempZeile, 13) = WS2.Cells(tempZeile, 13) + 1
Next iZeile
End Sub

cu
Chris

Anzeige
AW: Spalte in Zeile transponieren (mit Makro)
23.03.2016 15:00:29
Christian
Hallo Chris,
das ist riesig. Klappt genau so wie ich es mir vorgestellt habe!!! Vielen Dank dafür.
ich hab es jetzt in mein Import-Makro eingebaut und hab nur noch eine kleine Frage.
Ich sortiere die Spalten in der Zieltabelle etwas um. ich nutze dafür:

With .Range(.Cells(1, 1), .Cells(zaehler_4, 1))   'Spalte A ---> C
.Copy
wksAlle.Cells(Zeile_K, 3).PasteSpecial Paste:=xlPasteValues
End With
With .Range(.Cells(1, 2), .Cells(zaehler_4, 2))   'Spalte B ---> A
.Copy
wksAlle.Cells(Zeile_K, 1).PasteSpecial Paste:=xlPasteValues
usw...
Allerdings will ich jetzt für die transponierten Spalten nicht für jede Spalte eine seperaten Codeteil schreiben (ich würde bis Spalte "SS" machen --> das sind dann 500 transponierte).
gibt es dafür nicht eine Möglichkeit ala "Letzte Spalte"?

Anzeige
AW: Spalte in Zeile transponieren (mit Makro)
23.03.2016 15:56:06
ChrisL
Hi Christian
Schwer zu beurteilen ohne Zusammenhang.
Grundsätzlich stellt sich die Frage, ob es beim Umsortieren ein bestimmtes Muster gibt oder ob es ein "willkürliches" Umsortieren ist.
Wenn es kein Muster gibt, kann man mit folgendem Vorgehen (beispielhaft) ein paar Buchstaben sparen.
Sub DeinMakro()
Call HilfsMakro(1, 3) ' von A nach C
Call HilfsMakro(2, 1) ' von B nach A
End Sub
Private Sub HilfsMakro(lVon As Long, lNach As Long)
Cells(1, lVon).Copy Cells(1, lNach)
End Sub

cu
Chris

Anzeige
AW: Spalte in Zeile transponieren (mit Makro)
23.03.2016 17:45:13
Christian
Hallo Chris,
manchmal hab ich auch ein Brett vor dem Kopf. Das geht auch so ganz leicht :)
With .Range(.Cells(1, 14), .Cells(zaehler_4, 513))   'Spalte N-SS ---> AI-TN
.Copy
wksAlle.Cells(Zeile_K, 35).PasteSpecial Paste:=xlPasteValues
Aber Danke nochmal für deine großartige Hilfe :)
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Spalte in Zeile transponieren mit VBA und Excel-Formeln


Schritt-für-Schritt-Anleitung

Um eine Spalte in eine Zeile zu transponieren, kannst Du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste in das Projektfenster und wähle Einfügen > Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub t()
       Dim WS1 As Worksheet, WS2 As Worksheet
       Dim iZeile As Long, tempZeile As Variant
       Set WS1 = Worksheets("Ursprung")
       Set WS2 = Worksheets.Add
       WS2.Range("A1:AE1") = "div. Titel"
       For iZeile = 2 To WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row
           tempZeile = Application.Match(WS1.Cells(iZeile, 1), WS2.Columns(1), 0)
           If IsNumeric(tempZeile) Then
               WS2.Range("IV" & tempZeile).End(xlToLeft).Offset(0, 1) = WS1.Cells(iZeile, 8)
           Else
               tempZeile = WS2.Cells(WS2.Rows.Count, 1).End(xlUp).Row + 1
               WS2.Range(WS2.Cells(tempZeile, 1), WS2.Cells(tempZeile, 11)).Value = _
               WS1.Range(WS1.Cells(iZeile, 1), WS1.Cells(iZeile, 11)).Value
               WS2.Cells(tempZeile, 14) = WS1.Cells(iZeile, 8)
           End If
           WS2.Cells(tempZeile, 13) = WS2.Cells(tempZeile, 13) + 1
       Next iZeile
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus: Drücke ALT + F8, wähle t und klicke auf Ausführen.

Mit diesem Makro kannst Du die Spalte H in eine Zeile umwandeln und die Werte aus der Spalte transponieren.


Häufige Fehler und Lösungen

  • Fehler: „Laufzeitfehler 9: Index außerhalb des gültigen Bereichs.“

    • Lösung: Stelle sicher, dass die Arbeitsblätter „Ursprung“ und das Ziel-Worksheet bereits existieren.
  • Fehler: „Typenkonflikt.“

    • Lösung: Überprüfe, ob die Daten in den Zellen korrekt sind und keine leeren Zellen das Skript stören.
  • Fehler: „Das Makro kann nicht gefunden werden.“

    • Lösung: Überprüfe, ob das Makro im richtigen Modul gespeichert ist und dass Du es korrekt auswählst.

Alternative Methoden

Falls Du kein VBA verwenden möchtest, kannst Du auch Excel-Formeln nutzen:

  1. Verwende die Funktion TRANSPOSE:

    • Markiere den Bereich, in dem die transponierten Werte erscheinen sollen.
    • Gebe die Formel =TRANSPOSE(A1:A10) ein und drücke CTRL + SHIFT + ENTER (bei älteren Excel-Versionen).
  2. Kopieren und Transponieren:

    • Kopiere die Daten aus der Spalte.
    • Klicke mit der rechten Maustaste in die Zielzelle und wähle Inhalte einfügen > Transponieren.

Diese Methoden sind nützlich, wenn Du in Excel schnell Werte aus Spalten in Zeilen umwandeln möchtest.


Praktische Beispiele

  1. Beispiel mit VBA:

    • Angenommen, Du hast in Spalte H mehrere IDs, die Du in Zeile N transponieren möchtest. Das oben genannte Makro erledigt dies automatisch.
  2. Beispiel ohne VBA:

    • Wenn Du die Werte aus Spalte B in Zeilen umwandeln möchtest, kannst Du die TRANSPOSE-Funktion verwenden:
      =TRANSPOSE(B1:B10)

Tipps für Profis

  • Verwende dynamische Bereiche: Um die Anzahl der transponierten Spalten zu zählen, kannst Du die Funktion COUNTA verwenden, um die Anzahl der gefüllten Zellen in einer Spalte zu ermitteln.

  • Automatisiere den Prozess: Integriere das Transponieren in ein größeres Makro, das alle notwendigen Schritte zur Datenverarbeitung enthält.

  • Behalte die Originaldaten: Bevor Du Daten transponierst, erstelle immer eine Sicherungskopie der Originaldaten, um Datenverlust zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Spalten gleichzeitig transponieren?
Mit VBA kannst Du die Schleife anpassen, um mehrere Spalten gleichzeitig zu verarbeiten.

2. Kann ich die Transponierung auch ohne VBA durchführen?
Ja, Du kannst die TRANSPOSE-Funktion oder die Funktion „Inhalte einfügen“ in Excel verwenden, um Spalten in Zeilen umzuwandeln.

3. Was mache ich, wenn die Daten nicht richtig transponiert werden?
Überprüfe die Quellwerte auf leere Zellen oder Ungenauigkeiten, die das Ergebnis beeinflussen könnten.

4. Wie kann ich die Anzahl der transponierten Spalten zählen?
Verwende die Funktion COUNTA, um die Anzahl der nicht leeren Zellen in der transponierten Zeile zu zählen.

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