Excel 不使用分隔符对文本数据进行排序

Excel 不使用分隔符对文本数据进行排序,excel,vba,delimiter-separated-values,Excel,Vba,Delimiter Separated Values,我必须在excel中执行以下操作。我有多个相同格式的文本文件:(见下文) 我想写一个代码来导入所有文件,并在不同的excel列中给出最终输出,如下所示 1. Name Step1 Step2 Step3 3. Samplefile XYZ ABC ABC1 4. Samplefile2 XYZ2 ABC2 DEF2 我在这方面取得了一些进展。我能够导入文件并将其拆分 对于我的下一步,我需要一些帮助来修改此代码,以便我可以更改将配方文件

我必须在excel中执行以下操作。我有多个相同格式的文本文件:(见下文)



我想写一个代码来导入所有文件,并在不同的excel列中给出最终输出,如下所示

 1. Name         Step1  Step2  Step3
 3.  Samplefile   XYZ    ABC    ABC1
 4.  Samplefile2  XYZ2   ABC2   DEF2

我在这方面取得了一些进展。我能够导入文件并将其拆分

对于我的下一步,我需要一些帮助来修改此代码,以便我可以更改将配方文件导入到工作表1、工作表2等的工作表的格式,而不是文本文件namme

见下面的代码:

Sub CombineTextFiles()
    Dim FilesToOpen
    Dim x As Integer
    Dim wkbAll As Workbook
    Dim wkbTemp As Workbook
    Dim sDelimiter As String

    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    sDelimiter = "|"

    FilesToOpen = Application.GetOpenFilename _
      (FileFilter:="Text Files (*.txt), *.txt", _
      MultiSelect:=True, Title:="Text Files to Open")

    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "No Files were selected"
        GoTo ExitHandler
    End If

    x = 1
    Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen(x))
    wkbTemp.Sheets(1).Copy
    Set wkbAll = ActiveWorkbook
    wkbTemp.Close (False)
    wkbAll.Worksheets(x).Columns("A:A").TextToColumns _
      Destination:=Range("A1"), DataType:=xlDelimited, _
      TextQualifier:=xlDoubleQuote, _
      ConsecutiveDelimiter:=False, _
      Tab:=False, Semicolon:=False, _
      Comma:=False, Space:=False, _
      Other:=True, OtherChar:="|"

    x = x + 1

    While x <= UBound(FilesToOpen)
        Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen(x))
        With wkbAll
            wkbTemp.Sheets(1).Move After:=.Sheets(.Sheets.Count)
            .Worksheets(x).Columns("A:A").TextToColumns _
              Destination:=Range("A1"), DataType:=xlDelimited, _
              TextQualifier:=xlDoubleQuote, _
              ConsecutiveDelimiter:=False, _
              Tab:=False, Semicolon:=False, _
              Comma:=False, Space:=False, _
              Other:=True, OtherChar:=sDelimiter

        End With
        x = x + 1
    Wend

ExitHandler:
    Application.ScreenUpdating = True
    Set wkbAll = Nothing
    Set wkbTemp = Nothing
    Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler



End Sub
子组合文本文件()
暗文件打开
作为整数的Dim x
将wkbAll设置为工作簿
将wkbTemp设置为工作簿
将限制器设置为字符串
关于错误转到错误处理程序
Application.ScreenUpdating=False
sDelimiter=“|”
FilesToOpen=Application.GetOpenFilename_
(FileFilter:=“文本文件(*.txt),*.txt”_
MultiSelect:=真,标题:=“要打开的文本文件”)
如果TypeName(FilesToOpen)=“Boolean”,则
MsgBox“未选择任何文件”
去出口
如果结束
x=1
设置wkbTemp=Workbooks.Open(文件名:=FilesToOpen(x))
wkbTemp表格(1)复印件
设置wkbAll=ActiveWorkbook
wkbTemp.Close(错误)
wkbAll.工作表(x).列(“A:A”).文本到列_
目的地:=范围(“A1”),数据类型:=xlDelimited_
TextQualifier:=xlDoubleQuote_
连续delimiter:=False_
制表符:=False,分号:=False_
逗号:=False,空格:=False_
其他:=真,其他字符:=“|”
x=x+1

而x到底是什么阻止了你这么做?请具体说明。现在这只是一个规范,不是一个问题。嗨,蒂姆,谢谢你看这个。我只是想从这方面得到一些建议。我可以上传一个更具体的excel文件吗?我没有看到这样的选择。请让我知道这是否更清楚。我面临以下问题:a。如何为行应用分隔符?XYZ位于步骤1下方,而不是步骤b旁边。如果我使用类似Vlookup的东西,我如何区分sample file1和samplefile2下的内容。欢迎使用StackOverflow。当你问一个类似“如何编写代码..如何执行X”的问题时,这在SO中是一个不可接受的问题。()您需要开始编写构建代码,如果您对代码中的某些内容有特定问题并询问,您将获得所需的所有帮助。没有人会向你灌输如何“编写代码来构建符合你规范的解决方案”(例如:如何在VBA中打开文本文件是一个好问题)。如何在VBA中构建一个程序来对多个文件中的文本进行排序不是一个好问题。首先要弄清楚的可能是如何使用
Dir()循环文件夹中的文件
然后是如何逐行读取每个文件的内容。通过谷歌搜索其中任何一项都可以为您提供良好的起点。
 1. Name         Step1  Step2  Step3
 3.  Samplefile   XYZ    ABC    ABC1
 4.  Samplefile2  XYZ2   ABC2   DEF2
Sub CombineTextFiles()
    Dim FilesToOpen
    Dim x As Integer
    Dim wkbAll As Workbook
    Dim wkbTemp As Workbook
    Dim sDelimiter As String

    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    sDelimiter = "|"

    FilesToOpen = Application.GetOpenFilename _
      (FileFilter:="Text Files (*.txt), *.txt", _
      MultiSelect:=True, Title:="Text Files to Open")

    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "No Files were selected"
        GoTo ExitHandler
    End If

    x = 1
    Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen(x))
    wkbTemp.Sheets(1).Copy
    Set wkbAll = ActiveWorkbook
    wkbTemp.Close (False)
    wkbAll.Worksheets(x).Columns("A:A").TextToColumns _
      Destination:=Range("A1"), DataType:=xlDelimited, _
      TextQualifier:=xlDoubleQuote, _
      ConsecutiveDelimiter:=False, _
      Tab:=False, Semicolon:=False, _
      Comma:=False, Space:=False, _
      Other:=True, OtherChar:="|"

    x = x + 1

    While x <= UBound(FilesToOpen)
        Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen(x))
        With wkbAll
            wkbTemp.Sheets(1).Move After:=.Sheets(.Sheets.Count)
            .Worksheets(x).Columns("A:A").TextToColumns _
              Destination:=Range("A1"), DataType:=xlDelimited, _
              TextQualifier:=xlDoubleQuote, _
              ConsecutiveDelimiter:=False, _
              Tab:=False, Semicolon:=False, _
              Comma:=False, Space:=False, _
              Other:=True, OtherChar:=sDelimiter

        End With
        x = x + 1
    Wend

ExitHandler:
    Application.ScreenUpdating = True
    Set wkbAll = Nothing
    Set wkbTemp = Nothing
    Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler



End Sub