Импортируйте текстовый файл в Excel и отформатируйте текст в столбец

Я пытаюсь импортировать файл.txt в Excel с помощью кода VBA, а затем форматировать содержимое с помощью команды text to column.

Файл TXT содержит содержимое в следующем:

DATE | 1 | 2 | 3 | 4 | Something ||||| Not Sure |||||
DATE | 5 | 6 | 7 | 8 | New ||||| Whatever |||||

В настоящее время, используя код, который я нашел и ударил вместе, мне удалось сделать это далеко

Sub Sample()
    Dim MyData As String, strData() As String, myFile As String

    myFile = Application.GetOpenFilename()

    Open myFile For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, "|")


End Sub

Это просто получает все данные из текстового файла и разделяет каждый элемент в массив.

Я хотел бы поместить элементы из массива в столбцы Excel, начиная с Range("A5") И учитывать каждую новую строку.

Помогите?

(Изменить: я думал о перемещении вниз по строке в любое время, когда я получаю выбор пустого массива, но в каждой строке много пробелов, и это не сработает. Кроме того, длина строк не согласована в зависимости от содержимого.)

1 ответ

Решение

Вам нужно разделить данные двумя способами: на строки, используя символ NewLine, затем на ячейки, используя |

Обратите внимание, что разделение строк в вашем текстовом файле может быть vbNewLine, Если этот код не разбивается на строки, это первое место для поиска.

Чтобы завершить ваш код, как изложено, попробуйте

Sub Sample()
    Dim MyData As String
    Dim lineData() As String, strData() As String, myFile As String
    Dim i As Long, rng As Range

    ' lets make it a little bit easier for the user
    myFile = Application.GetOpenFilename("Text Files (*.txt), *.txt")

    Open myFile For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    ' Split into wholes line
    lineData() = Split(MyData, vbNewLine)
    Set rng = Range("A5")
    ' For each line
    For i = 0 To UBound(lineData)
        ' Split the line
        strData = Split(lineData(i), "|")
        ' Write to the sheet
        rng.Offset(i, 0).Resize(1, UBound(strData) + 1) = strData
    Next
End Sub

В качестве альтернативы, трактуйте файл.txt как текст

Sub Sample()
    Dim fn As Integer
    Dim MyData As String
    Dim lineData As String, strData() As String, myFile As String
    Dim i As Long, rng As Range

    myFile = Application.GetOpenFilename("Text Files (*.txt), *.txt")

    Set rng = Range("A5")

    ' Lets not rely on Magic Numbers
    fn = FreeFile
    Open myFile For Input As #fn
    i = 1
    Do While Not EOF(fn)
        Line Input #fn, lineData
        strData = Split(lineData, "|")
        rng.Cells(i, 1).Resize(1, UBound(strData) + 1) = strData
        i = i + 1
    Loop
    Close #fn
End Sub
Другие вопросы по тегам