
Se eu estiver usando o recurso Texto para Colunas nos dados a seguir, usando ";" como delimitador:
foo;bar;qux;baz;torrada;
quux;geléia;feijão;
Terminarei com os resultados "alinhados à esquerda" na grade de células resultante:
|foo |bar |qux |baz |toast |
|quux |jam |beans | | |
No entanto, quero que eles estejam "alinhados à direita":
|foo |bar |qux |baz |toast |
| | |quux |jam |beans |
Como posso fazer isso?
OBSERVAÇÃO:Eu sei que "alinhado à direita" pode não ser o termo correto, implicando em vez disso
| foo| bar| qux| baz| toast|
| quux| jam| beans| | |
mas não é isso que estou procurando. Portanto, se alguém puder sugerir um termo melhor para o que estou descrevendo, faça-o.
Termo aditivo:Como abordagem alternativa, se alguém souber uma maneira de usar o Excel para reorganizar células de forma que
|a |b |c |d | | | | | |
|n |m |o |p |q | | | | |
|e |f |g |h |i |j |k |l | |
|n |m |o |p |q | | | | |
|x | | | | | | | | |
torna-se
| | | | | |a |b |c |d |
| | | | |n |m |o |p |q |
| |e |f |g |h |i |j |k |l |
| | | | |n |m |o |p |q |
| | | | | | | | |x |
então isso também funcionaria.
Responder1
As fórmulas a seguir permitirão a conversão rápida de seus dados em um formato que o Text-to-Columns analisará prontamente justificado à direita conforme você descreve:
D5
fórmula (anexa um ponto e vírgula se estiver ausente):
=IF(RIGHT(B5,1)<>";",B5&";",B5)
G5
fórmula (anexa o número necessário de ponto e vírgula):
=REPT(";",5-(LEN(D5)-LEN(SUBSTITUTE(D5,";",""))))&D5
Copiar os resultados seguido por Colar Especial como Valores deve fornecer matéria-prima adequada para uma conversão de Texto em Colunas.
A solução depende da existência de um número máximo fixo de colunas; aqui, cinco. A fórmula de G5
poderia ser generalizada adicionando uma célula 'número de colunas a serem geradas' em outro lugar da planilha e referenciando essa nova célula em vez do valor codificado 5
.
Além disso, se você tiver certeza de que os dados sempre terão ponto e vírgula à direita, a etapa intermediária D5:D7
será supérflua.
EDITAR:Pela observação de Some_Guy nos comentários, o método também funcionará se todas as linhas forem construídas parafaltaum ponto e vírgula final.
Responder2
Conforme declarado, não, esta não é uma função padrão de texto para colunas ou existe uma maneira inerente de fazer isso no Excel, que eu saiba. No entanto, este VBA fará isso por você (supondo que você não tenha espaços em branco entre as células preenchidas)-
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
Responder3
Aqui está outra rotina VBA para fazer isso. Faça seu Texto para Colunas, selecione o intervalo retangular em que você coloca os dados (ou seja, colunas A
- (máximo de campos) × linhas) e execute esta macro. VerComo adiciono VBA no MS Office?
para material instrucional.
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
Essevaithe;quick;;fox;
lidar corretamente com células em branco incorporadas (por exemplo, ). Caso contrário, as diferenças entre esta resposta e a outra são apenas preferências pessoais arbitrárias, e a outra pode ser superior de maneiras que não entendo.