如何用VBA实现多个TXT/DTA文件横向拼接并在Excel中打开
DTA/TXT文件横向拼接解决方案
前置说明
DTA是Stata软件的专属数据格式,Excel原生不支持直接读取该格式文件,最优方案是先将所有DTA文件批量导出为制表符分隔的TXT文件,再执行横向拼接,操作门槛最低,兼容性最好。
步骤1:批量转换DTA为TXT(Stata环境执行)
打开Stata软件,执行以下代码,即可将目标文件夹内所有DTA文件批量转为同文件名的TXT文件:
// 替换为你的DTA文件所在文件夹路径 cd "C:\你的DTA文件存放路径" local dtaFiles : dir "." files "*.dta" foreach file in `dtaFiles' { use "`file'", clear // 导出为制表符分隔的TXT,保留原文件名 outfile using "`=substr("`file'", 1, length("`file'")-4)'_txt.txt", delimiter(tab) replace }
步骤2:VBA批量横向拼接TXT文件
将所有需要合并的TXT文件(含从DTA转换得到的TXT)放到同一个文件夹中,再执行以下VBA代码即可完成横向拼接:
Sub MergeTxtHorizontally() Dim folderPath As String, fileName As String Dim nextCol As Long, i As Long, rowNum As Long Dim fileContent As String, lineArr As Variant Application.ScreenUpdating = False ' 弹出文件夹选择窗口 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "请选择存放TXT文件的文件夹" If .Show <> -1 Then MsgBox "未选择文件夹,程序退出" Exit Sub End If folderPath = .SelectedItems(1) & "\" End With nextCol = 1 ' 第一个文件从A列开始写入 fileName = Dir(folderPath & "*.txt") Do While fileName <> "" Open folderPath & fileName For Input As #1 rowNum = 1 ' 每个文件从第一行开始写入 Do Until EOF(1) Line Input #1, fileContent ' 按制表符拆分内容,如为逗号分隔的TXT请将vbTab替换为"," lineArr = Split(fileContent, vbTab) ' 逐单元格写入内容 For i = LBound(lineArr) To UBound(lineArr) Cells(rowNum, nextCol + i).Value = lineArr(i) Next i rowNum = rowNum + 1 Loop Close #1 ' 计算下一个文件的起始列 nextCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1 fileName = Dir ' 读取下一个文件 Loop Application.ScreenUpdating = True MsgBox "所有文件合并完成!" End Sub
使用方法
- 新建空白Excel文件,按下
Alt+F11打开VBA编辑器 - 右键点击左侧工程栏当前工作簿,选择「插入」-「模块」
- 将上述VBA代码粘贴到模块窗口中
- 按下
F5运行宏,按提示选择TXT文件所在文件夹即可
注意事项
- 运行宏前请清空当前工作表的原有内容,避免数据覆盖
- 不同文件行数不一致时,行数较短的文件对应下方位置会自动留空,不会出现数据错位
- 如果TXT为其他分隔符格式,只需修改
Split函数内的分隔符参数即可
内容的提问来源于stack exchange,提问作者Walser
相关产品推荐
相关产品推荐

