Como converter coluna de números em texto separados por vírgula em um conjunto de quatro

2

Eu tenho uma coluna de 200 números de celular.
Quero convertê-los em linhas de texto em um conjunto de quatro números de celular e separados por vírgula.

12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678

Por favor, me dê um conselho.

    
por user245491 14.08.2013 / 06:09

3 respostas

2

Macro VBA simples para transpor uma única coluna para várias colunas

Comenteitodasasetapas,porissoéfácilajustaramacroàssuasnecessidadespessoais.
Vocêpodeescolhersuacolunadedadosequantascolunasdesejadepoisdetranspor

  1. AbraoeditorExceleVBAcomAlteF11
  2. Nopainelesquerdo,coleocódigonafolhaondeseusdadossãocolocados
  3. Modifiqueasduasprimeiraslinhasdeacordocomsuasnecessidades
  4. ExecuteamacrocomF5
ConststrCol="B"    '## select the column with your data
Const iTrans = 4      '## select how many columns you want after transposing

Sub transposeColumn()
    '## search the last row to know how many cells we have to iterate through
    iLastrow = Range(strCol & ActiveSheet.Rows.Count).End(xlUp).Row
    iCol = Range(strCol & 1).Column

    '## begin to loop through the chosen column
    '## Cause we delete cells on every loop, we need to divide the loop counter
    '## And since the division result isn't an integer, we have to round up
    For i = 1 To WorksheetFunction.RoundUp(iLastrow / iTrans, 0)

        '## set the source and target range for easier access later
        Set rngSrc = Range(Cells(i + 1, iCol), Cells(i + iTrans - 1, iCol))
        Set rngTrg = Range(Cells(i, iCol + 1), Cells(i, iCol + iTrans - 1))

        '## set the format of target range to text
        rngTrg.NumberFormat = "@"

        '## copy and paste the values, the trick is to use transpose
        rngSrc.Copy
        rngTrg.PasteSpecial Transpose:=True

        '## delete all cells which we have just transposed
        rngSrc.Delete shift:=xlUp
    Next i
End Sub  
    
por 14.08.2013 / 10:54
0

Um script do awk ajudará no problema.

O primeiro loop do script awk lida com os números até o múltiplo final de quatro. O segundo loop imprime os poucos números finais. Se for o número final, a vírgula final não será impressa.

awk '{ 
    for (n=1; n < NF-4; n+=4)
           printf("%s, %s, %s, %s\n", $n, $(n+1), $(n+2), $(n+3));    
    for (; n <= NF; n++)
        if (n == NF) 
            print $n;
        else 
            printf("%s, ", $n)          
}' filename
    
por 14.08.2013 / 08:39
0

Aqui está uma solução de função de planilha. Onde sua lista está em A1:A40 :

=TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+COLUMN()-2),"0000000000")

Isso é inserido em C1 e preenchido à direita de F1 e, em seguida, abaixo de quantas linhas você precisar.

Vocêprecisaráajustarafórmulaparacorresponderàsuaplanilha.

Porexemplo,sevocêquiserquesuaslinhasdesaídacomecemcomC2,osegundoargumentodafunçãoINDEXdeveser(ROW()-2)*4+COLUMN()-2.

SevocêquiserquesuaslinhasdesaídacomecemcomD1,osegundoargumentodafunçãoINDEXdeveser(ROW()-1)*4+COLUMN()-3.

EDITAR:
Acabeideverquevocêqueriaumasaídaseparadaporvírgulas.IssoéumpoucotrabalhosoporqueCONCATENATEnãopodereceberargumentosdamatriz,masfuncionará.Bastapreencheraseguintefórmulaemumacoluna.

=CONCATENATE(TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+1),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+2),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+3),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+4),"0000000000"))

Isso depende de sua saída, começando na linha 1. Se, por exemplo, sua saída começar na linha 2, você precisará alterar cada instância de ROW()-1 para ROW()-2 .

    
por 14.08.2013 / 22:14