Excel - Alguma maneira inteligente de pegar a primeira linha de cada célula e movê-la para a última linha?

Excel - Alguma maneira inteligente de pegar a primeira linha de cada célula e movê-la para a última linha?

Tenho algumas planilhas que preciso para mover a primeira linha de cada célula para a última linha. Por exemplo, esta é uma célula:

Chris / Mike / Ralph
Henry / Steve
Mark / Bob

Se tornaria

Henry / Steve
Mark / Bob
Chris / Mike / Ralph

Eu estava pensando em usar regex, mas não vejo nenhuma maneira fácil de lidar com isso. Copiar e colar as células em um editor de texto e depois copiá-las de volta resulta na colagem incorreta, pois muitas células são mescladas. Talvez exista um código/fórmula para fazer isso, mas não tenho certeza de como fazê-lo.

Qualquer idéia será útil!

Responder1

Consegui fazer um script VBA simples para fazer isso:

Sub swap()
    Dim cel As Range
    Dim selectedRange As Range

    Set selectedRange = Application.Selection

    For Each cel In selectedRange.Cells
       Dim lines() As String
       Dim firstLine As String

       lines = Split(cel.Value, vbLf)
       If UBound(lines) > 0 Then
        firstLine = lines(0)
        lines(0) = lines(UBound(lines))
        lines(UBound(lines)) = firstLine
        cel.Value = Join(lines, vbLf)
        End If
    Next cel
End Sub

Responder2

o que você pode fazer é adicionar uma coluna auxiliar e excluí-la:

+----------------------+
|         NAMES        |
+----------------------+
| Chris / Mike / Ralph |
+----------------------+
| Henry / Steve        |
+----------------------+
| Mark / Bob           |
+----------------------+

Para isso

+----------------------+------------------+
|         NAMES        |     AUX          |
+----------------------+------------------+
| Chris / Mike / Ralph | =count(@[NAMES]) |    
+----------------------+------------------+
| Henry / Steve        |     1            |
+----------------------+------------------+
| Mark / Bob           |     2            |
+----------------------+------------------+

Em seguida, ordene por coluna AUXe pronto. Usei a =count()fórmula para que você possa ter a primeira linha como o número máximo n, depois as outras linhas começam de 1 a n-1. Em seguida, exclua a coluna.

+----------------------+------------------+
|         NAMES        |     AUX          |
+----------------------+------------------+
| Henry / Steve        |     1            |
+----------------------+------------------+
| Mark / Bob           |     2            |
+----------------------+------------------+
| Chris / Mike / Ralph | =count(@[NAMES]) |
+----------------------+------------------+

E então

+----------------------+
|         NAMES        |  
+----------------------+
| Henry / Steve        |  
+----------------------+
| Mark / Bob           | 
+----------------------+
| Chris / Mike / Ralph |
+----------------------+

Saúde.

informação relacionada