O Excel 2010 divide as células com vírgulas sem espaços (vs. vírgulas com espaços)

0

Eu tenho feito muita pesquisa para descobrir isso, mas todas as respostas precisam dividir todos os dados por todas as vírgulas (ou seja, toda vez que uma vírgula aparece, ela é dividida) ou saber a localização exata da vírgula vírgula (ou seja, é a terceira vírgula).

O que eu preciso é mais variável do que isso. Recebo dados exportados em uma lista em uma célula, em que os dados que precisam permanecer na mesma célula são separados por vírgulas com espaços (por exemplo, "cachorro, gato" e não "cachorro, gato"). Eu preciso que as divisões ocorram no último ("cachorro, gato"), mas não no primeiro ("cachorro, gato"). Isso ocorre em quantidades variadas de tempo com base nos dados em si.

Por exemplo, uma célula pode dizer isso:

Dog Walk, Talk e Wag, Cat Meow, Hiss e Purr, Papagaio Squawk e Talk, Duck Quack e Talk

Onde eu precisaria que fosse assim:

célula 1: caminhada, conversa e abanar do cão

célula 2: gato miau, assobio e ronronar

célula 3: Papagaio Squawk e Talk

cell 4: Duck Quack e Talk

Mas outra célula terá palavras diferentes e posicionamento de vírgula diferente.

Existe alguma maneira de fazer isso?

Obrigado !!

    
por allysonb 09.01.2018 / 20:09

2 respostas

1

Quando precisei fazer algo assim, usei a função Localizar e substituir para "ocultar" temporariamente a combinação de caracteres antes de separar as colunas.

O processo é basicamente assim:

  1. Selecione todo o texto a ser dividido em colunas.
  2. Use Localizar e substituir para alterar todas as combinações de espaço de vírgula para outra coisa que não é encontrada nos dados (normalmente, uso algo como @@@ ).
  3. Execute a função Texto para colunas , dividindo as vírgulas.
  4. Selecione todas as colunas recém-criadas.
  5. Execute o Localizar e substituir novamente, mas inverta-o para que o @@@ seja alterado novamente no par de vírgulas.
por 09.01.2018 / 21:25
0

Esta é a macro do VBA que implementa a solução da techturtle. Selecione as células que você deseja processar e execute esta macro curta:

Sub splitText()
    Dim rng As Range, r As Range, a As Variant, i As Long
    Set rng = Selection.Cells.SpecialCells(2)

    For Each r In rng
        v = r.Value
        If InStr(1, v, ",") > 0 Then
            ary = Split(Replace(v, ", ", Chr(1)), ",")
            i = 1
            For Each a In ary
                r.Offset(0, i).Value = Replace(a, Chr(1), ", ")
                i = i + 1
            Next a
        End If
    Next r
End Sub

Os dados originais não foram alterados.

NOTA:

Este código é específico para células contendo constantes em vez de fórmulas.

    
por 10.01.2018 / 02:40