VBA实现批量TXT文档合并到同一个Excel工作簿中

鉴水鱼技能说 2024-07-26 21:26:50

有网友问到:有多个txt文件在同一个文件夹中,想要把这些txt批量载入到同一个excel文件中,且一个工作表对应一个txt文件,表名就用txt文件名,每个txt的内容大致结构如下:

1|A公司|北京|鞋服|10000

2|B公司|南京|包袋|12000

...... ......

也就是txt中多个指标用“|”隔开,导入excel时需要分列,因为有几千个的txt,每个txt有几万行,手动操作耗时极大,希望通过VBA批量处理,该如何处理?

对大批量的数据处理是VBA的强项。用VBA将多个文本文档(txt文件)合并到一个Excel工作簿,主要包含以下操作:(1)选取文件(可指定文件类型);(2)逐个读取选定的文件,为每个文件创建一个工作表,逐行读取文件,并将读取的内容写入Excel工作表中;

假设有如下图所示的多个文本文件,文本文件中每个行对应着一行Excel数据,每个数据项之间用“|”分隔。

接下来,新建一个Excel工作簿,按Alt+F11组合键进入到VBA代码编辑窗口,然后输入以下VBA代码:

Function SelectTextFiles() As Variant '选择文本文件,以数组形式返回选定的文件 Dim strFolder As String Dim strFileFilter As String Dim varFiles As Variant Dim i As Integer ' 设置文件过滤器,只显示.txt文件 strFileFilter = "Text Files (*.txt), *.txt" ' 显示文件选择对话框,允许选择多个文件 varFiles = Application.GetOpenFilename(FileFilter:=strFileFilter, MultiSelect:=True) ' 检查是否选择了文件 If IsArray(varFiles) Then SelectTextFiles = varFiles Else ' 如果没有选择文件,则输出消息 SelectTextFiles = "" '空值 End IfEnd FunctionSub ReadTextFileAndWriteToExcel() Dim rng As Range, arr As Variant, tmp As Variant Dim shName As String, sh As Object arr = SelectTextFiles() '选择文本文件对话框 If IsArray(arr) = False Then Exit Sub '未选择文件 For Each fpath In arr '取得主文件名,添加以主文件名为名称的工作表 tmp = Split(fpath, "\") n = UBound(tmp) shName = Left(tmp(n), Len(tmp(n)) - 4) Sheets.Add after:=Sheets(Sheets.Count) Set sh = ActiveSheet sh.Name = shName '读取文本文档,并写入到当前工作表 Open fpath For Input As #1 ' 初始化行号 i = 1 ' 逐行读取文件 Do While Not EOF(1) Line Input #1, strTextLine ' 将读取的行写入到Excel工作表的第i行 tmp = Split(strTextLine, "|") n = UBound(tmp) Set rng = sh.Range("A" & i).Resize(1, n) rng = tmp i = i + 1 Loop ' 关闭文件 Close #1 Next MsgBox "操作完成!", vbOKOnly + vbInformation, "提示"End Sub

说明:(1)自定义函数SelectTextFiles用于选择文本文档,调用该函数可以同时选定多个文件,调用函数后以一个一维数组的形式返回选定后的文件列表(包含完整的路径);(2)子程序ReadTextFileAndWriteToExcel逐个访问文件列表,首先创建以主文件名命名的工作表,然后,逐行读取指定文本文档,将读入的一行文本,以“|"为分隔符进行分离,存入到一个一维数组中,然后将该数组值写入到指定Excel工作表的一个行,直至文本文件读取完毕。

代码编写代码后,返回到Excel工作表窗口,然后点击【开发工具】选项卡下的【宏】命令,如下图示:

然后在弹出的【宏】窗口中选择【ReadTextFileAndWriteToExcel】宏,再单击【执行】按钮,Excel系统将自动运行宏代码,首先弹出一个【选择文件】对话框,如下图示:

选定文件后,VBA代码将自动逐个读取选定的文件,并进行相应的操作,操作完成后,可以看到文本文档的内容已被读入到了Excel工作表中,几个文本文档就对应几张Excel工作表。

这的创建的工作表个数与选定的文件个数一致,每个工作表中的数据行数与文本文件中的数据行数一致,无需人工干预。在实际使用时,仅需将上述代码复制到一个新建的Excel工作簿后,执行宏操作就可实现。

我是,关注我,持续分享更多的Excel知识与操作技巧。

0 阅读:0