terça-feira, 6 de abril de 2010

Código para importação de arquivo texto delimitado

Vou deixar aqui só para eventual consulta.
O delimitador é o ponto-e-vírgula.
Arquivo texto sem cabeçalho.

;-)

Sub importa_delimitado()
   
    Dim entrada         As String       'linha do txt
    Dim i               As Single       'número de caracteres
    Dim linha           As Integer
    Dim coluna          As Integer
    Dim texto           As String       'texto a ser gravado na célula
    Dim ultimo          As Boolean      'controle do último caracter da linha
   
    Open "C:\Users\kazu\Desktop\pasta1.csv" For Input As #1
        
    linha = 1
    coluna = 1
    Do While Not EOF(1)
        Line Input #1, entrada
        For i = 1 To Len(entrada)
            If Mid(entrada, i, 1) = ";" Then
                Cells(linha, coluna).Value = texto
                coluna = coluna + 1
                texto = ""
            Else
                'Se for o último caracter, grava na célula
                If i = Len(entrada) Then
                    texto = texto & Mid(entrada, i, 1)
                    Cells(linha, coluna).Value = texto
                    coluna = coluna + 1
                    texto = ""
                    ultimo = True
                End If
                If Not ultimo Then texto = texto & Mid(entrada, i, 1)
            End If
            ultimo = False
        Next
        linha = linha + 1
        coluna = 1
    Loop
 
    Close #1
 
End Sub


4 comentários:

Unknown disse...

Prezado Kazu, há casos de arquivos de textos delimitados por número de caracteres (largura de coluna variável), a exemplo da Pnad/IBGE. Sabe indicar uma solução excel VBA para esses casos?
at

edmar

Kazu disse...

Edmar, boa noite!

Não conheço o arquivo, você consegue enviar um exemplo?
Olhei no site do IBGE mas não achei...

Unknown disse...

Olá Kazu.
Veja no exemplo a baixo a linha de código, que corresponde apenas a uma parte do txt de uma PNAD (apenas para ilustrar...)

.TextFileFixedColumnWidths = Array _
(2, 8, 7, 4, 9, 1, 2, 2, 2, 1, 2, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 1, 3)

Os números 2, 8, 7 ... informam ao excel como separar o txt em colunas de tamanho coerente
com a biblioteca do arquivo de dados.

Eu queria uma macro que possibilitasse ao usuário entrar com esses dados usando intervalos de células, pois os txt's mudam de um ano para outro.

Vc pode achar o txt do IBGE em http://downloads.ibge.gov.br/downloads_estatisticas.htm

Depois vá em Trabalho e rendimento/ Pesquisa nacional por amostra de domicilios/microdados/ 2013

Grato pela atenção

edmar

Aprendiz_VBA disse...

Sou aprendiz de VBA, precisava de um código que conseguisse importar um arquivo texto delimitado, localizei este publicado no seu blog em 2010.
Percebi que o último registro não importou e não tenho conhecimento ainda para localizar o ajuste necessário, conseguiria me ajudar, por gentileza.
Parabéns pelo seu trabalho, tu é fera.

Pesquisar este blog

Arquivo do blog

Quem sou eu

Minha foto
Administrador de Empresas/Técnico em Processamento de Dados. Microsoft Office User Specialist - Excel Proficient. Pós-graduado em Business Intelligence.