|  
                                             
	Hallo, 
	  
	ich habe mal etwas vorbereitet, hoffe es trifft die Problematik. Als Ziel für die transponierten Daten wird hier ein eigenes Arbeitsblatt gewünscht, kann man natürlich noch in 'Range' abändern. 
Option Explicit
Sub TestIt()
  
  Dim n&
  
  n = transpRecordsets(Source:=Worksheets(1), _
                       Destination:=Worksheets(2))
  
  If n > 0 Then
    Call MsgBox("Es wurden " & IIf(n = 1, n & " Datensatz", n & " Datensätze") & " kopiert.", _
                vbInformation)
  Else
    Call MsgBox("Keine Datensätze vorhanden/gefunden.", _
                vbExclamation)
  End If
  
End Sub
Public Function transpRecordsets(Source As Excel.Worksheet, Destination As Excel.Worksheet) As Long
  
  Dim rng           As Excel.Range
  Dim rngRS         As Excel.Range
  Dim bRecordset    As Boolean
  Dim bEntry        As Boolean
  Dim bCopyHeader   As Boolean
  Dim rid&, n&
  
  Set rng = Source.Range("B2") 'Startpunkt/-zelle
  bCopyHeader = True  'Kopfzeile soll mitkopiert werden (wenn möglich)
  rid = 2             'abs. Zeilenindex für Beginn erster Datensatz (Kopfzeile ist damit: rid-1)
  
  'erster Datensatz vorhanden?
  bRecordset = Len(Trim(rng.Text)) > 0
  While bRecordset
    
    'die Einträge des Datensatzes durchwandern
    'und in rngRS "merken"
    Set rngRS = Nothing
    'ist ein Eintrag vorhanden?
    bEntry = Len(Trim(rng.Offset(ColumnOffset:=1).Text)) > 0
    While bEntry
      
      'Eintrag dem Datensatz zuordnen
      ' Ein Eintrag besteht aus einem Bezeichner
      ' und einem Wert (d.h. umfasst 2 Spalten)
      If Not rngRS Is Nothing Then
        Set rngRS = Union(rng.Offset(ColumnOffset:=1).Resize(ColumnSize:=2), _
                          rngRS)
      Else
        Set rngRS = rng.Offset(ColumnOffset:=1).Resize(ColumnSize:=2)
      End If
      
      'nächster Eintrag
      Set rng = rng.Offset(RowOffset:=1)
      'ist ein Eintrag vorhanden?
      bEntry = Len(Trim(rng.Offset(ColumnOffset:=1).Text)) > 0
    Wend
    
    If Not rngRS Is Nothing Then
    'an Zielort kopieren
    '(es wird hier davon ausgegangen, dass die Anzahl
    ' und Reihenfolge der Variablen immer die gleiche ist)
      
      If bCopyHeader Then
        bCopyHeader = False
        If rid > 1 Then 'Platz für Kopfzeile vorhanden?
          'Kopfzeile (einmalig) kopieren (transponiert)
          rngRS.Columns(1).Copy
          Destination.Rows(rid - 1).PasteSpecial xlPasteValues, Transpose:=True
        End If
      End If
      
      'Datensatz kopieren (transponiert)
      rngRS.Columns(2).Copy
      Destination.Rows(rid).PasteSpecial xlPasteValues, Transpose:=True
      
      'den animierten Kopierrahmen deaktivieren
      Application.CutCopyMode = False
      
      'Zeile für nächsten Datensatz
      rid = rid + 1
      'Anzahl der kopierten Datensätze
      n = n + 1
    End If
    
    'zwischen zwei Datensätzen gibt es noch eine leere Zeile
    'die hiermit übergangen wird
    Set rng = rng.Offset(RowOffset:=1)
    'ist ein weiterer Datensatz vorhanden?
    bRecordset = Len(Trim(rng.Text)) > 0
  Wend
  
  'Anzahl der kopierten Datensätze zurückgeben
  transpRecordsets = n
  
End Function
 
	  
     |