Como extrair a string entre a enésima e a n+1 ocorrência de um caractere no Excel 2010?

Como extrair a string entre a enésima e a n+1 ocorrência de um caractere no Excel 2010?

Tenho uma planilha com uma coluna que contém uma lista de um ou mais nomes de bancos de dados. Infelizmente, o tempo de resposta para alterar este relatório é longo. Então preciso manipular os dados.

A coluna contém todos os bancos de dados específicos de um registro em uma única célula, separados por vírgulas. Preciso separar essa lista e colocar cada banco de dados em uma célula separada. Nota importante: eu sounãotem permissão para usar macros/código VBA nesta solução.

A primeira é fácil: encontre a primeira vírgula, retorne tudo à esquerda dela. São os próximos com os quais estou lutando.

Criei uma coluna que conta quantas vírgulas existem na célula, para poder determinar se vários bancos de dados estão listados.

Como posso enfrentar os próximos?

Responder1

Esta não é uma resposta de função de planilha, mas também não usa VBA.

Você já tentou usar o recurso "Texto para colunas"? No Excel 2010, é um dos botões da faixa Dados.

  1. Selecione sua coluna.
  2. Clique no botão "Texto para colunas".
  3. Na primeira página do assistente, escolha “Delimitado” e depois Avançar.
  4. Na segunda página, marque “Vírgula” para escolhê-la como delimitador. Você pode marcar/desmarcar alguns dos outros, dependendo do formato dos seus dados.
  5. Provavelmente você pode clicar em Concluir neste ponto para dividir seus dados em colunas, mas você pode querer ir para a próxima página para alterar os formatos das colunas.

Responder2

Com dados de amostra emA1, emB1digitar:

=TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",999)),COLUMNS($A:A)*999-998,999))

e copie em:

insira a descrição da imagem aqui

EDITAR#1:

Se começarmos com material em colunasAeBassim:

insira a descrição da imagem aqui

e execute esta pequena macro:

Sub dural()
   Dim N As Long, i As Long, K As Long
   N = Cells(Rows.Count, "A").End(xlUp).Row
   K = 1

   For i = 2 To N
      v = Cells(i, "A").Value
      ary = Split(Cells(i, "B").Value, ",")
      For Each a In ary
         Cells(K, "C").Value = v
         Cells(K, "D").Value = a
         K = K + 1
      Next a
   Next i
End Sub

vamos acabar com isso:

insira a descrição da imagem aqui

informação relacionada