2016-08-28 5 views
-2

Ok so habe ich so etwas wie dieses:Wie transpose Spalte zu Zeilen Tabellenkalkulation?

hello 
hi 
how 
are 
you 
hello 
how 
are 
you 
hello 
hi 
hi 
hi 
hello 
hi 
how 
how 
are 
hello 
you 

ich diese Spalte wollen in Zeilen wie folgt umzusetzen:

hello hi how are you 
hello how are you 
hello hi hi hi 
hello hi how how are 
hello you 

Wie das ich erreichen?

+0

Danke Carpetsmoker für die Bearbeitung der Frage, Sie waren schneller als ich. :) – Bee

Antwort

1

1) Wählen Sie die Daten aus. 2) Kopieren (Strg-C) 3) Wählen Sie die Zelle aus, in die Sie die transponierten Daten einfügen möchten. 4) Einfügen Spezial (im Bearbeitungsmenü oder auf der linken Seite der Symbolleiste) und wählen Sie Einfügen TRANSPOSE.

+0

Hallo Luke. Ich hoffe, es war so einfach. Aber ich habe 77.808 Zellen in dieser Spalte. Ich muss eine Formel erstellen, die jede Zelle findet, die "Hallo" hat und eine Zeile von dort erstellt, bis sie die nächste Zelle findet, die "Hallo" usw. enthält – Bee

0

Eine Möglichkeit (! Wahrscheinlich nicht die beste) wäre, um Ihre Liste mit hello dann zu beenden, ist Ihr erster hello ist in A2 unter der Annahme, in B2:

=IF(AND($A2="hello",COLUMN()<MATCH("hello",$A3:$A77809,0)+1),OFFSET($A2,COLUMN()-1,,),"") 

Ziehen Sie über und nach unten, bis zumindest eine Spalte ist völlig leer. Wählen Sie dann Alle, Kopieren, Einfügen Spezial ..., Werte und löschen Sie Zeilen, die in SpalteB leer sind. Schließlich, falls erforderlich, verketten Sie die Teile (Zellen) Zeile für Zeile mit Leerzeichen zwischen den einzelnen Zellen, wiederholen Sie Einfügen/Spezial und löschen Sie den Überschuss.

2

Wenn Sie dieses Rätsel die VBA lösen wollen, dann möchten Sie vielleicht mit diesem Stück Code zu berücksichtigen:

Option Explicit 

Public Sub tmpSO() 

Dim i As Long 
Dim LastRow As Long 
Dim wsSource As Worksheet 
Dim wsDestination As Worksheet 
Dim DestinationRow As Long, DestinationColumn As Long 

Set wsSource = ThisWorkbook.Worksheets("SourceSheetName") 
Set wsDestination = ThisWorkbook.Worksheets.Add(Before:=wsSource) 

LastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row 

DestinationRow = 1 
DestinationColumn = 1 
For i = 1 To LastRow 
    If LCase(Trim(wsSource.Cells(i, 1).Value2)) = "hello" Then 
     DestinationColumn = 1 
     DestinationRow = DestinationRow + 1 
    Else 
     DestinationColumn = DestinationColumn + 1 
    End If 
    wsDestination.Cells(DestinationRow, DestinationColumn).Value2 = wsSource.Cells(i, 1).Value2 
Next i 

End Sub 

Offensichtlich werden Sie in dem obigen Code SourceSheetName für den tatsächlichen Namen ändern müssen des Blattes, in dem sich die Daten befinden. Ansonsten sollte der Code funktionieren und tun, was Sie wollen.

0

Mit mehr als 78.000 Zeilen sollte die folgende VBA-Routine, die VBA-Arrays und ein Auflistungsobjekt verwendet, ziemlich schnell und schneller ausgeführt werden, als die "Arbeit" im Arbeitsblatt direkt auszuführen.

Option Explicit 
Option Compare Text 
Sub HelloStart() 
    Dim wsSrc As Worksheet, wsRes As Worksheet, rRes As Range 
    Dim vSrc As Variant, vRes As Variant 
    Dim COL As Collection 
    Dim MaxCols As Long 
    Dim V As Variant, W As Variant 
    Dim I As Long, J As Long 


Set wsSrc = Worksheets("sheet1") 
Set wsRes = Worksheets("sheet2") 
    Set rRes = wsRes.Cells(1, 1) 

With wsSrc 
    vSrc = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
End With 

Set COL = New Collection 
For Each W In vSrc 
    Select Case W 
     Case Is = "Hello" 
      If Not IsEmpty(V) Then 
       COL.Add V 
       MaxCols = IIf(MaxCols > UBound(V), MaxCols, UBound(V)) 
      End If 
      ReDim V(1 To 1) 
      V(1) = W 
     Case Else 
      ReDim Preserve V(1 To UBound(V) + 1) 
      V(UBound(V)) = W 
    End Select 
Next W 
If Not IsEmpty(V) Then COL.Add V 
MaxCols = IIf(MaxCols > UBound(V), MaxCols, UBound(V)) 

ReDim vRes(1 To COL.Count, 1 To MaxCols) 
I = 0 
For Each V In COL 
    I = I + 1 
    J = 0 
    For Each W In V 
     J = J + 1 
     vRes(I, J) = W 
    Next W 
Next V 

Set rRes = rRes.Resize(UBound(vRes, 1), UBound(vRes, 2)) 
wsRes.Cells.Clear 
With rRes 
    .Value = vRes 
    .EntireColumn.AutoFit 
End With 

End Sub 
Verwandte Themen