Wie kann ich die Ergebnisse der Excel-Funktion „Text in Spalten“ rechtsbündig ausrichten?

Wie kann ich die Ergebnisse der Excel-Funktion „Text in Spalten“ rechtsbündig ausrichten?

Wenn ich die Funktion „Text in Spalten“ auf die folgenden Daten anwende und „;“ als Trennzeichen verwende:

foo;Bar;Qux;Baz;Toast;
Quux;Marmelade;Bohnen;

Am Ende erhalte ich die Ergebnisse „linksbündig“ im resultierenden Zellenraster:

 |foo   |bar   |qux   |baz   |toast |
 |quux  |jam   |beans |      |      |

Ich möchte jedoch, dass sie „rechtsbündig“ sind:

 |foo   |bar   |qux   |baz   |toast |
 |      |      |quux  |jam   |beans |

Wie kann ich das machen?

NOTIZ:Ich weiß, dass "rechtsbündig" vielleicht nicht der richtige Begriff ist, sondern eher

|   foo|   bar|   qux|   baz| toast| 
|  quux|   jam| beans|      |      |

aber das ist nicht, was ich suche. Wenn also jemand einen besseren Begriff für das vorschlagen kann, was ich beschreibe, bitte.

Nachtrag:Als alternativer Ansatz, wenn jemand eine Möglichkeit kennt, Excel zu verwenden, um Zellen so neu anzuordnen, dass

 |a   |b   |c   |d   |    |    |    |    |    |
 |n   |m   |o   |p   |q   |    |    |    |    |
 |e   |f   |g   |h   |i   |j   |k   |l   |    |
 |n   |m   |o   |p   |q   |    |    |    |    |
 |x   |    |    |    |    |    |    |    |    |

wird

 |    |    |    |    |    |a   |b   |c   |d   |
 |    |    |    |    |n   |m   |o   |p   |q   |
 |    |e   |f   |g   |h   |i   |j   |k   |l   |
 |    |    |    |    |n   |m   |o   |p   |q   |
 |    |    |    |    |    |    |    |    |x   |

dann würde das auch klappen.

Antwort1

Die folgenden Formeln ermöglichen eine schnelle Konvertierung Ihrer Daten in ein Format, das von Text-to-Columns problemlos rechtsbündig analysiert werden kann, wie Sie es beschreiben:

Excel-Ausschnitt

D5Formel (fügt ein Semikolon hinzu, wenn es fehlt):

=IF(RIGHT(B5,1)<>";",B5&";",B5)

G5Formel (stellt die erforderliche Anzahl Semikolons voran):

=REPT(";",5-(LEN(D5)-LEN(SUBSTITUTE(D5,";",""))))&D5

Durch Kopieren der Ergebnisse und anschließendes Einfügen von Inhalten als Werte sollte das für eine Text-in-Spalten-Konvertierung geeignete Rohmaterial bereitgestellt werden.

Die Lösung hängt davon ab, dass es eine feste maximale Anzahl von Spalten gibt; hier fünf. Die Formel G5könnte verallgemeinert werden, indem an einer anderen Stelle im Blatt eine Zelle „Anzahl der zu generierenden Spalten“ hinzugefügt und diese neue Zelle anstelle des fest codierten Werts referenziert wird 5.

Wenn außerdem garantiert ist, dass die Daten immer mit einem Semikolon abschließen, ist der Zwischenschritt D5:D7überflüssig.

BEARBEITEN:Laut Some_Guys Bemerkung in den Kommentaren funktioniert die Methode auch, wenn alle Zeilen so aufgebaut sind,Mangelein abschließendes Semikolon.

Antwort2

Wie gesagt, nein, das ist keine Standardfunktion zum Einfügen von Text in Spalten, und es gibt auch keine mir bekannte Möglichkeit, dies in Excel zu tun. Dieses VBA erledigt das jedoch für Sie (vorausgesetzt, Sie haben keine Leerzeichen zwischen den ausgefüllten Zellen)-

Sub test()
Dim lrow As Integer
lrow = Cells(Rows.Count, "A").End(xlUp).Row

Dim lcol As Integer
lcol = Cells("1", Columns.Count).End(xlToLeft).Column

Dim lfcol As Integer
Dim dif As Integer
For i = 1 To lrow
    lfcol = Cells(i, Columns.Count).End(xlToLeft).Column
    dif = lcol - lfcol
    For j = lfcol To 1 Step -1
        If dif = 0 Then Exit For
        If Not Cells(i, j) Is Nothing Then
            Cells(i, j + dif) = Cells(i, j)
            Cells(i, j) = vbNullString
        End If
    Next
Next
End Sub

Antwort3

Hier ist eine weitere VBA-Routine, um dies zu tun. Konvertieren Sie Text in Spalten, wählen Sie dann den rechteckigen Bereich aus, in den Sie Daten einfügen (d. h. Spalten A- (max. Felder) × Zeilen) und führen Sie dieses Makro aus. SieheWie füge ich VBA in MS Office hinzu? für Unterrichtsmaterial.

Sub Copy_Right()
    For Each rr In Selection.Rows
        For cn = Selection.Columns.Count To 1 Step -1
            If Len(rr.Cells(1, cn)) > 0 Then Exit For
        Next cn
        ' cn is now the (relative) column number of the last cell in this row
        ' that contains (non-blank) data.
        my_offset = Selection.Columns.Count - cn
        ' my_offset is how many columns to the right we need to move.
        ' If my_offset = 0, the row is full of data (or, at least,
        ' the last column contains data; there may be blank cells
        ' to its left), so there’s nowhere to move it.
        ' If cn = 0, the row is empty, so there’s nothing to move.
        If cn = 0 Or my_offset = 0 Then
            ' Nothing to do.
        Else
            For cn = Selection.Columns.Count To 1 Step -1
                If cn > my_offset Then
                    ' Copy data to the right.
                    rr.Cells(1, cn) = rr.Cells(1, cn - my_offset)
                Else
                    ' Set the cells on the left to blank.
                    rr.Cells(1, cn) = ""
                End If
            Next cn
        End If
    Next rr
End Sub

DasWilleBehandeln Sie eingebettete leere Zellen (z. B. the;quick;;fox;) korrekt. Ansonsten sind die Unterschiede zwischen dieser und der anderen Antwort nur willkürliche persönliche Vorlieben, und die andere ist möglicherweise in einer Weise überlegen, die ich nicht verstehe.

verwandte Informationen