Hi,
bei deinem Sortieren beziehst du dich nicht auf das aktive Tabellenblatt, deshalb muss vor ALLEN Zellangaben (Range und Cells) der Blattname stehen - bei dir fehlt er vor jeweils vor Cells(2, 14)
Einfacher ist es, wenn man sich mittels With-Anweisung auf ein bestimmtest Tabellenblatt bezieht - das macht den Code kürzer und übersichtlicher. Allerdings muss man dabei darauf achten, dass vor ALLEN Zellangaben (Range und Cells) ein Punkt (.) steht. Dies ist für Excel der Hinweis, dass sich alle Zellangaben auf das innerhalb der With-Anweisung genannte Tabellenblatt beziehen - fehlt der Punkt, dann gibt es einen Laufzeitfehler, weil Excel die Zellangabe nicht zuordnen kann. In deiner Mappe gibt es zwar keinen Laufzeitfehler, aber das hängt einfach damit zusammen, dass du das Makro sicher ausgeführt hast, wenn Tabelle1 aktiv ist, dann erkennt Excel Zellangaben zum gerade aktiven Tabellenblatt zugehörig. Wenn du das Makro mit deinen Änderungen jedoch ausführst wenn Tabelle2 aktiv ist, gibt es Ärger.
Sub Transponieren()
Dim lngZeile As Long
Dim intSpalte As Integer
Dim lngZiel As Long
lngZiel = 2
Dim intAnzahl As Integer
With Worksheets("Tabelle1")
For lngZeile = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
For intSpalte = 4 To 12 Step 2
If Application.Count(.Range(.Cells(lngZeile, intSpalte), .Cells(lngZeile, intSpalte + 1))) > 0 Then
.Range(.Cells(lngZeile, 1), .Cells(lngZeile, 3)).Copy Worksheets("Tabelle2").Cells(lngZiel, 1)
.Range(.Cells(lngZeile, intSpalte), .Cells(lngZeile, intSpalte + 1)).Copy Worksheets("Tabelle2").Cells(lngZiel, 3)
lngZiel = lngZiel + 1
End If
Next intSpalte
Next lngZeile
End With
With Worksheets("Tabelle2")
.Range(.Cells(2, 1), .Cells(lngZiel, 5)).Sort key1:=.Cells(2, 1), order1:=xlAscending, Header:=xlNo
End With
End Sub
Bis später, Karin