Agrupar um número de colunas do Excel em linhas

1

Atualmente, estou trabalhando em uma coluna com o conteúdo para o comentário do professor.

Eu gostaria de delimitá-lo pelo espaço, vírgula ou sinais de pontuação entre as palavras dentro do conteúdo.

Ao mesmo tempo, gostaria de retirar cada uma das palavras do conteúdo e colocá-las em linhas em vez de colunas.

Exemplo:

Catherine is a good girl . -> This is the teacher's comment.

Após delimitar no excel, tenho "Catherine é uma boa menina" em 6 colunas com 1 coluna para 1 palavra.

No entanto, gostaria que o resultado das palavras fosse colocado em linhas. Ficaria assim em 6 linhas:

Catherine
is
a
good
girl
.
    
por cody_q 15.06.2012 / 02:40

2 respostas

2

O Excel tem a capacidade de fazer isso .

  1. Copy the data in one or more columns or rows.

  2. Before you paste the copied data, right-click your first destination cell (the first cell of the row or column into which you want to paste your data), and then click Paste Special.

  3. In the Paste Special dialog box, select Transpose, and then click OK.

You'll find theTranspose check box in the lower-right corner of the dialog box:

O artigo vem da ajuda do Excel 2003, mas o processo se aplica até o mais novo Excel. A caixa de diálogo pode parecer diferente.

    
por 15.06.2012 / 03:58
0

O seguinte código VBA fará o truque.

Sub FlattenToSingleCol()
    Cells(1, 1).Activate ' Go to the top left

    ' Go past the last row that starts with a word
    Do Until IsEmpty(ActiveCell)
        DoEvents
        ActiveCell.Offset(1).Select
    Loop

    ' Set curRow to the last row that starts with a word (the row above ActiveCell)
    curRow = ActiveCell.Row - 1

    Do While curRow > 0
        DoEvents
        Cells(curRow, 1).Activate

        ' Go right past the last cell that contains a word
        Do Until IsEmpty(ActiveCell)
            DoEvents
            ActiveCell.Offset(0, 1).Activate
        Loop

        ' Come back left to the last cell that contains a word
        If ActiveCell.Column > 1 Then
            ActiveCell.Offset(0, -1).Activate
        End If

        ' Insert a new row below the current one for each
        Do Until ActiveCell.Column = 1 ' Move each non-empty cell to a new row and move left to the edge
            DoEvents
            ActiveCell.Offset(1).EntireRow.Insert
            Cells(ActiveCell.Row + 1, 1).Value = ActiveCell.Value
            ActiveCell.Clear
            ActiveCell.Offset(0, -1).Select
        Loop

        ' Go to the row above. Processing from the bottom up avoids re-processing lines we just inserted below.
        curRow = ActiveCell.Row - 1
    Loop
End Sub
    
por 28.02.2013 / 23:23