Como extrair a seqüência de caracteres entre a Nésima e a N + 1ª ocorrência de um caractere no Excel 2010?


2

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

A coluna contém todos os bancos de dados específicos para um registro em uma única célula, separados por vírgulas. Eu preciso separar esta lista e colocar cada banco de dados em uma célula separada. Nota importante: Estou não autorizados a usar VBA macros / code nesta solução.

A primeira é fácil: encontre a primeira vírgula, retorne tudo à esquerda dela. É o próximo com o qual estou lutando.

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

Como posso enfrentar os próximos?


Use texto para colunas.
Kyle

Respostas:


1

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

Você já tentou usar o recurso "Texto em colunas"? No Excel 2010, é um dos botões na faixa de dados.

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

1

Com dados de amostra em A1 , em B1, digite:

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

e copie:

insira a descrição da imagem aqui

EDIT # 1:

Se começarmos com o material nas colunas A e B, desta forma:

insira a descrição da imagem aqui

e execute esta macro curta:

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

acabaremos com isso:

insira a descrição da imagem aqui


Acabei de receber um novo requisito para corresponder à pessoa associada à lista de bancos de dados. Portanto, essa solução se torna repentinamente interessante. Você poderia descompactar a função? Por exemplo, minha lista de bancos de dados é mais parecida com "Banco de dados corporativo 1, banco de dados HR 3, banco de dados financeiro 67". Eu preciso que os espaços permaneçam, então não posso apenas aparar os resultados. Além disso, a lista de bancos de dados está na coluna D. Estou terminando com uma quantidade enorme de espaços extras nas colunas nas quais arrasto.
precisa saber é

Eu não entendo o novo requisito.
Gary Student

O relatório possui uma coluna para Nome e uma coluna com a lista de bancos de dados. Um nome, muitos bancos de dados. Agora, eles querem que eu o explique para que haja uma linha com nome e banco de dados único. Para cada nome e associação de banco de dados.
precisa saber é

@DeNaeL Veja minha EDIT # 1
Gary's Student

Se você precisar fazer isso de maneira não-VBA, o recurso Colar e Transposição poderá ser útil. Depois de dividir o nome de um banco de dados em células em uma única linha, você pode usá-lo para transpor para colunas e copiar e colar os nomes ao lado. Sei que isso pode ser um pouco trabalhoso, se você tiver muitas linhas para processar ...
JRI
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.