Como expandir colunas de itens no Excel para que cada item esteja em sua própria linha?

5

Eu tenho isso:

  -----A-----|-----B-----|-----C-----
1|cherry     |apple      |banana
2|kiwi       |banana     |cantaloupe
3|peach      |grape      |peach
4|           |peach      |watermelon
5|           |strawberry |

Eu gostaria disso:

  -----A-----|-----B-----|-----C-----
1|           |apple      |
2|           |banana     |banana
3|           |           |cantaloupe
4|cherry     |           |
5|           |grape      |
6|kiwi       |           |
7|peach      |peach      |peach
8|           |strawberry |
9|           |           |watermelon

Basicamente, expanda cada coluna de acordo com o que está na coluna e agrupe os elementos semelhantes em sua própria linha. (Suponha que cada coluna esteja classificada.)

Eu venho fazendo isso manualmente jogando chef Ginsu recortável, mas queria saber se existe uma maneira automatizada? (Eu tenho o Excel 2007, mas vou estar obtendo o Excel 2010 em breve).

Como alternativa, existe outra ferramenta melhor que o Excel para esse fim?

Obrigado pelo seu tempo.

    
por JW. 11.07.2012 / 20:52

2 respostas

4

O VBA não é necessário. Crie uma lista de todas as instâncias (por exemplo, ColumnD possui linhas: maçã, banana, melão, cereja, uva, kiwi, pêssego, morango, melancia) e insira =IF(ISERROR(INDEX(A$1:A$5,MATCH($D1,A$1:A$5,0))),"",INDEX(A$1:A$5,MATCH($D1,A$1:A$5,0))) em E1. Arraste o canto inferior direito de E1 para G1. Clique duas vezes no canto inferior direito do G1. Copiar / Colar Valores. Excluir colunas A: D.

    
por 12.07.2012 / 04:47
1

Pseudo-código por enquanto como ir para a cama, mas você provavelmente poderia fazê-lo com algum VBA semelhante ao abaixo.

Obtenha o 'intervalo usado' para a planilha usando

Dim oSH As Worksheet
Set oSH = ActiveWorkbook.Sheets("MySheetWithList")
Dim data As range
Set data = oSH.UsedRange

Em seguida, repita os valores das colunas A: C em cada linha do intervalo usado, recortando e colando quando corresponder aos valores.

    i = 2

While (i < data.Rows.Count)
    A = oSH.range("A" & i).Value2
    B = oSH.range("B" & i).Value2
    C = oSH.range("C" & i).Value2

    If (A = B) Then
     [Move the cells down in columns B and C and reset used range]
    Else
     [Perform the other checks on same row]
    End If

    i = i + 1
Wend

etc.

    
por 11.07.2012 / 23:52