Macro Importar Datos de txt a Excel

Poseo un archivo en bloc de notas (txt) del cual necesito extraer a excel por cada línea algunas cadenas de texto que se encuentran en determinadas posiciones de columna dentro de este archivo (columna 8 a la 17 y columna 86 a la 121). He encontrado muchos ejemplos pero para hacerlo con archivos con delimitadores o tabulaciones, pero no he encontrado uno que pueda utilizar para mi propósito y la verdad no se como hacerlo
Les agradezco enormemente su valiosa colaboración y guía para construir esta macro.

2 respuestas

Respuesta
1

.15/11/16

Buenos días, Alexander

La siguiente rutina deja, en las columnas que le indiques ambas cadenas que mencionaste.

Accede al Editor de VBA (Atajo: Alt + F11), allí inserta un módulo (Insertar-Módulo) y pega el siguiente código:

Sub ArmaGrup()
'---- Variables modificables:
'=== ALEXANDER, modifica estos datos de acuerdo a tu planilla:
IniCol = "A2" 'celda inicial donde están las cadenas de texto
IniDest = "D2" ' primera celde donde dejar lo extraido
IniGrupo1 = 8 ' posición inicial del primer grupo
FinGrupo1 = 17 ' posición final del primer grupo
IniGrupo2 = 36 '86 ' posición inicial del Segundo grupo
FinGrupo2 = 50 '121 ' posición final del Segundo grupo
'---- fin Variables
'
'---- inicio de rutina:
'  
UltFila = Range(IniCol).End(xlDown).Row
Do While Range(IniCol).Offset(LaFila).Row <= UltFila
    LaCadena = Trim(Range(IniCol).Offset(LaFila).Value)
    String1 = Trim(Mid(LaCadena, IniGrupo1, FinGrupo1 - IniGrupo1))
    String2 = Trim(Mid(LaCadena, IniGrupo2, FinGrupo2 - IniGrupo2))
    Range(IniDest).Offset(LaFila, 0).Value = String1
    Range(IniDest).Offset(LaFila, 1).Value = String2
    LaFila = LaFila + 1
Loop
End Sub

Nota que, al principio del código, hay unas variables para que lo adaptes a tu archivo.

Siendo que tu archivo no está delimitado podrías resolverlo utilizando la fórmula =EXTRAE()

Por ejemplo, si tu primera cadena estuviera en A2:

=EXTRAE(A2;8;17-8)

=EXTRAE(A2;86;121-86)


De un tiempo a esta parte, quienes preguntan han dejado de valorizar las respuestas que damos. No entiendo esa actitud.

Excelente Fejoal, me funciono! Ahora lo voy a adaptar a mis necesidad, ya que son varias las columnas del mismo archivo las que necesito extraer a Excel
Muchísimas Gracias!. Saludos

.

Ok, me alegro

Si usas la rutina sólo tendrás que agregar un par de líneas por cada grupo como estas dos:

    StringX = Trim(Mid(LaCadena, IniGrupoX, FinGrupoX - IniGrupoX))
    Range(IniDest). Offset(LaFila, X-1).Value = StringX

y sus respectivos parámetros de inicio / fin:

IniGrupoX =  ??  'posición inicial del X grupo
FinGrupoX = ??  'posición Final del X grupo

Donde X será el numero del nuevo grupo de caracteres a extraer.

Abrazo
Fer

.

Respuesta
1

H o l a : Te anexo la macro para cargar un archivo desde una ruta y un nombre. Solamente cambia la ruta y el nombre del archivo en esta parte de la macro:

    ruta = "C:\trabajo\"
    archivo = "a.txt"

Pon la macro en un archivo de excel, en la hoja que tengas activa te podrá el resultado de la carga; la primer cadena de texto te la pondrá en la columna A y la segunda cadena en la columna B


Sub CargaTxt()
'Por.Dante Amor
    ruta = "C:\trabajo\"
    archivo = "a.txt"
    '
    Application.ScreenUpdating = False
    If Dir(ruta & archivo) = "" Then
        MsgBox "Archivo no existe"
        Exit Sub
    End If
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    h1.Cells.Clear
    h1.Columns("A:B").NumberFormat = "@"
    '
    Workbooks.OpenText Filename:=ruta & archivo, Origin:=xlMSDOS, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlNone, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, _
        FieldInfo:=Array(1, 2), TrailingMinusNumbers:=True
    Set l2 = ActiveWorkbook
    Set h2 = l2.Sheets(1)
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        h1.Cells(i, "A") = Mid(h2.Cells(i, "A"), 8, 10)
        h1.Cells(i, "B") = Mid(h2.Cells(i, "A"), 86, 36)
    Next
    l2.Close False
    Application.ScreenUpdating = True
    MsgBox "Datos importados"
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas