Separar texto em coluna

Visual Basic for Aplication e macros no Excel.
Regras do fórum
Sua dúvida foi respondida? Marque como RESOLVIDO em seus tópicos, usando o botão com marca verde. Imagem

Separar texto em coluna

Mensagempor error1 » Ter Dez 17, 2019 4:24 pm

Pessoal,

É possível separar texto e converter por coluna utilizando VBA? Não quero fazer processo manual em que Excel oferece a ferramenta própria para isso.
error1
Membro
Membro
 
Mensagens: 15
Registrado em: Ter Dez 17, 2019 4:10 pm
Has thanked: 3 times
Have thanks: 0 time

{ SO_SELECT }

Re: Separar texto em coluna

Mensagempor EdsonBR » Qua Dez 18, 2019 8:03 am

Bom dia, error1

Sim é possível e existem diversas alternativas para isso. Algumas delas seriam, por exemplo:

  1. Usando o método TextToColumns do obj. Range (quando há um delimitador ou largura de campo)
  2. Usando a função Split do VBA com uma matriz (quando há um delimitador)
  3. Usando o método Parse do obj. Range (quando a largura do campo é fixa)
  4. Usando Regex também com matriz (casos mais complexos)
  5. ...
Imagem
Avatar do usuário
EdsonBR
Membro
Membro
 
Mensagens: 676
Registrado em: Qui Nov 05, 2015 11:43 pm
Localização: Joinville, SC
Has thanked: 147 times
Have thanks: 442 times

Re: Separar texto em coluna

Mensagempor error1 » Qua Fev 19, 2020 4:30 pm

Senhores, preparei o exemplo, segue abaixo:

https://www.sendspace.com/file/zh7ce6
error1
Membro
Membro
 
Mensagens: 15
Registrado em: Ter Dez 17, 2019 4:10 pm
Has thanked: 3 times
Have thanks: 0 time

Re: Separar texto em coluna

Mensagempor EdsonBR » Qua Fev 19, 2020 8:59 pm

Boa noite, error1. Não precisava ter sido tããão econômico nos exemplos: só uma linha? :(

error1 - [dentro do anexo] escreveu:A nota em questão foi emitida e o número da NF é 999999-1 na data de 19/02/2020


Suas linhas de dados são todas assim? Um texto antes, as letras NF seguidas de algum texto, uma sequência de 6 dígitos, um hífen e mais um dígito, algum texto e uma data no formato dd/mm/aaaa e fim do texto?

Ou por acaso NF pode ser N.F., nf, n.f., Nota Fiscal, Nota Fiscal Nº, Nota Nº, etc...?
O número da NF também, sempre tem hífen ou às vezes é outro ou nenhum caracter...?
A data sempre é separada por / ou pode ser por hífen, ponto... e o ano é sempre com 4 algarismos...?

Por isso teria sido importante vc rechear seu arquivo exemplo com várias entradas, assim poderíamos reconhecer o padrão pra não ter que refazer o código diversas vezes.
Imagem
Avatar do usuário
EdsonBR
Membro
Membro
 
Mensagens: 676
Registrado em: Qui Nov 05, 2015 11:43 pm
Localização: Joinville, SC
Has thanked: 147 times
Have thanks: 442 times

Re: Separar texto em coluna

Mensagempor error1 » Qui Fev 20, 2020 7:15 am

EdsonBR

Compreendi.

Segue o modelo completo encenando o cenário real do trabalho e explicitando a sua necessidade da conversão.

https://www.sendspace.com/file/nkrigd
Editado pela última vez por Adalberto7 em Qui Fev 20, 2020 8:45 am, em um total de 2 vezes.
Razão: Não use o botão citar sem necessidade, use o botão Responder que fica logo abaixo da janela de resposta - Não polua o fórum.
error1
Membro
Membro
 
Mensagens: 15
Registrado em: Ter Dez 17, 2019 4:10 pm
Has thanked: 3 times
Have thanks: 0 time

Re: Separar texto em coluna

Mensagempor EdsonBR » Qui Fev 20, 2020 10:03 am

Entendi. Então é um texto com largura fixa.
Supondo que a coluna com essas frases seja a coluna B:
Código: Selecionar todos
Sub SeparaFrase()
  [B:B].Parse "[A nota em questão foi emitida e o número da NF é ][nnnnnn][-n na data de nn/nn/nnnn]"
End Sub

Dessa forma a coluna B conterá a primeira parte da frase, a coluna C conterá o número da NF e coluna D o final da frase. Note que os dados que porventura estiverem em B:B, C:C e D:D serão eliminados para dar lugar à esses (inclusive os originais, já que estão na B). então ou vc insere colunas em branco para dar lugar ou faz o excel jogar os dados em outras colunas ou intervalos. Por exemplo:

Código: Selecionar todos
Sub SeparaFrase()
  [B:B].Parse "[A nota em questão foi emitida e o número da NF é ][nnnnnn][-n na data de nn/nn/nnnn]", [F:F]
End Sub

Dessa forma, manterá sua coluna B com os originais e lançará as divididas nas colunas F, G e H.
_____
P.S.:
Só para enriquecer um pouco a solução adotada, se vc quisesse desprezar a parte inicial da frase que penso eu não faria sentido guardar numa coluna e também a parte entre o número da NF e a data (em sumo: extrair somente o número da NF e a Data) daria pra fazer dessa forma:
Código: Selecionar todos
Sub SeparaFrase()
  [B:B].Parse Space(51) & "[nnnnnn]" & Space(12) & "[nn/nn/nnnn]", [F:F]
End Sub
Imagem
Avatar do usuário
EdsonBR
Membro
Membro
 
Mensagens: 676
Registrado em: Qui Nov 05, 2015 11:43 pm
Localização: Joinville, SC
Has thanked: 147 times
Have thanks: 442 times


Voltar para VBA & Macros

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes