将txt文件导入excel,并将文本设置为列格式

将txt文件导入excel,并将文本设置为列格式,excel,text,file-conversion,vba,Excel,Text,File Conversion,Vba,我试图通过VBA代码将.txt文件导入Excel,然后使用“文本到列”命令格式化内容 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, my

我试图通过VBA代码将.txt文件导入Excel,然后使用“文本到列”命令格式化内容

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”)开始,并对每一新行进行说明

帮忙


(编辑:我想在任何时候选择空数组时向下移动一行,但每行中都有许多空格,这不起作用。而且,行的长度根据内容的不同而不一致。)

您需要以两种方式拆分数据:使用换行符将数据拆分为行,然后使用
将数据拆分为单元格。

请注意,文本文件中的换行符可能不是
vbNewLine
。如果这段代码没有分成几行,那就是第一个要查看的地方

若要将您的代码完成为Posed,请尝试

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