Excel 不使用分隔符对文本数据进行排序
我必须在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列中给出最终输出,如下所示
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