Импортируйте текстовый файл в 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

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

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

Помощь?

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


person jchemp    schedule 01.11.2014    source источник
comment
Есть ли конкретная причина, по которой вы обрабатываете файл Text как двоичный?   -  person chris neilsen    schedule 01.11.2014
comment
Нет причин, кроме наивных попыток   -  person jchemp    schedule 03.11.2014


Ответы (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
person chris neilsen    schedule 01.11.2014