Excel: ¿alguna forma inteligente de tomar la primera línea de cada celda y moverla a la última línea?

Excel: ¿alguna forma inteligente de tomar la primera línea de cada celda y moverla a la última línea?

Tengo algunas hojas que necesito para mover la primera línea de cada celda a la última línea. Por ejemplo esta es una celda:

Chris / Mike / Ralph
Henry / Steve
Mark / Bob

Se convertiría

Henry / Steve
Mark / Bob
Chris / Mike / Ralph

Estaba pensando en usar expresiones regulares pero no veo ninguna manera fácil de solucionar esto. Copiar y pegar las celdas en un editor de texto y luego volver a copiarlas da como resultado que el pegado sea incorrecto ya que muchas celdas están fusionadas. Tal vez haya un código/fórmula para hacer esto, pero no estoy seguro de cómo hacerlo.

¡Cualquier idea será de gran ayuda!

Respuesta1

Pude hacer un script VBA simple para hacer esto:

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

Respuesta2

lo que puedes hacer es agregar una columna auxiliar y eliminarla:

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

A esto

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

Luego ordena por columna AUXy listo. Utilicé la =count()fórmula para que puedas tener la primera línea como el número máximo n, luego las otras líneas comienzan del 1 al n-1. Luego elimine la columna.

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

Y luego

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

Salud.

información relacionada