
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:
D5
Formel (fügt ein Semikolon hinzu, wenn es fehlt):
=IF(RIGHT(B5,1)<>";",B5&";",B5)
G5
Formel (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 G5
kö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.