VBA – Texto para Colunas

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on July 21, 2023

Este tutorial mostrará como converter uma sequência de texto em uma única célula em várias colunas usando o método Range TextToColumns no VBA

Texto para Colunas

O método Range.TextToColumns do VBA é uma ferramenta poderosa para limpar dados que foram importados de arquivos de texto ou csv, por exemplo.

Considere a seguinte planilha.

base dados csv

Os dados foram inseridos no Excel em uma única coluna e estão separados por aspas.

Você pode usar o método Range TextToColumns para separar esses dados em colunas.

Sintaxe do TextToColumns

expression.TextToColumns(Destination, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers)

sintaxe texttocolumns

Expression (Expressão)

Esse é o intervalo de células que você deseja dividir – por exemplo: Range(“A1:A12”).

Todos os argumentos no método TextToColumns são opcionais (eles têm colchetes ao redor).

Destination (Destino)

Onde você deseja que o resultado seja colocado – geralmente você substitui os dados e os divide no mesmo local.

DataType (Tipo de dados)

O tipo de análise de texto que você está usando – pode ser xlDelimited (padrão se omitido) ou xlFixedWidth.

TextQualifier (Qualificador de texto)

Se você tiver aspas (simples ou duplas) ao redor de cada campo no texto que está dividindo, precisará indicar se elas são simples ou duplas.

ConsequtiveDelimiter (Delimitadores Consecutivos)

Essa opção é verdadeira ou falsa e diz ao VBA para considerar dois dos mesmos delimitadores juntos como se fossem um delimitador.

Tab (Tabulação)

Verdadeiro ou Falso, o padrão é Falso – informa ao VBA que os dados são delimitados por uma tabulação.

Semicolon (Ponto e vírgula)

Pode se True (verdadeiro) ou False (falso); o padrão é False (falso) – isso informa ao VBA que os dados são delimitados por um ponto e vírgula.

Space (Espaço)

True ou False; o padrão é False – indica ao VBA que os dados são delimitados por um espaço.

Other (Outros)

Pode ser True ou False; o padrão é False. Se você definir como True, o próximo argumento, OtherChar, precisará ser especificado.

OtherChar (Outro Carácter)

Esse é o caractere pelo qual o texto é separado (ou seja, ^ ou |, por exemplo).

FieldInfo (Informações sobre o campo)

Esta é uma matriz que contém informações sobre o tipo de dados que está sendo separado. O primeiro valor da matriz indica o número da coluna nos dados, e o segundo valor indica a constante que você usará para representar o tipo de dados necessário.

Um exemplo de 5 colunas com tipos de dados de texto, números e datas poderia ser:

Array(Array(1, xlTextFormat), Array(2, xlTextFormat), Array(3, xlGeneralFormat), Array(4, xlGeneralFormat), Array(5, xlMDYFormat))

Outra maneira de definir isso é:

Array(Array(1, 2), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 3))

Os números na segunda coluna são os valores das constantes em que a constante xlTextFormat tem o valor 2, a xlGeneralFormat (padrão) tem o valor 1 e a xlMDYFormat tem o valor 3.

DecimalSeparator (Separador Decimal)

Você pode especificar o separador decimal que o VBA deve usar se houver números nos dados. Se omitido, ele usará a configuração do sistema, que geralmente é uma vírgula.

ThousandsSeparator (Separador de milhares)

Você pode especificar o separador de milhares que o VBA deve usar se houver números nos dados. Se omitido, ele usará a configuração do sistema, que geralmente é um ponto.

TrailingMinusNumbers (Números negativos à direita)

Esse argumento serve principalmente para compatibilidade com dados gerados a partir de sistemas mais antigos, em que o sinal de menos costumava vir depois do número e não antes. Você deve definir isso como True se os números negativos tiverem o sinal de menos atrás deles. O padrão é False.

Conversão de Texto em Colunas

O procedimento a seguir converterá os dados do Excel acima em colunas.

Sub TextoParaColunas1()
Range("A1:A12").TextToColumns Destination:=Range("A1:A12"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, _
Tab:=False, _
Semicolon:=False, _
Comma:=False, _
Space:=True, _
Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
DecimalSeparator:=".", _
ThousandsSeparator:=",", _
TrailingMinusNumbers:=True
End Sub

No procedimento acima, preenchemos todos os parâmetros. No entanto, muitos dos parâmetros estão definidos como falsos ou com a configuração padrão e não são necessários. Uma versão mais limpa do procedimento acima é apresentada a seguir. É necessário usar os nomes dos parâmetros para indicar quais parâmetros estamos usando.

Sub TextoParaColunas2()
  Range("A1:A12").TextToColumns _
  DataType:=xlDelimited, _
  TextQualifier:=xlDoubleQuote, _
  ConsecutiveDelimiter:=True, _
  Space:=True
End Sub

Há apenas 4 parâmetros que são realmente necessários – os dados são delimitados por uma aspa dupla, você quer que aspas consecutivas sejam tratadas como uma só e os dados são separados por um espaço!

Para uma linha de código ainda mais rápida, poderíamos omitir os nomes dos parâmetros, mas precisaríamos colocar vírgulas para salvar o lugar do parâmetro. Você só precisa colocar informações até o último parâmetro que estiver usando – nesse caso, o espaço que separa os dados, que é o oitavo parâmetro.

Sub TextoParaColunas3()
   Range("A1:A12").TextToColumns , xlDelimited, xlDoubleQuote, True, , , , True
End Sub

Quando você executar qualquer um dos procedimentos acima, os dados serão separados conforme o gráfico abaixo.

resultado final colunas

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA