之前我们分享了如何通过VBA来讲TXT文件的数据导入Excel的方法,增加Excel的功能,也给我们在处理多样化的数据源的过程中,提供了很大的方便,不过我们也看到了,在之前写入数据的过程中,一次只能写入TXT的一行数据,如果我们恰好是希望将多行txt数据写入到Excel的一行呢?
场景简介
假设我们当前有这样一份数据
网络导出的数据中,经常会碰到这样的数据,我们理想中的一行数据因为代码转行或者是分隔符等原因,爬取的数据被分割在了txt的每一行,假设我们正好要汇总的数据有四行,那么我们如何将这几行数据汇总在一行呢?
代码区
本案例中,我们需要实现的是这样的效果。
即每次循环4行,那么在代码中要如何实现呢?
Sub test()With Application.FileDialog(msoFileDialogFolderPicker) If .Show = -1 Then pathn = .SelectedItems(1) End IfEnd Withk = 0i = Cells(Rows.Count, 1).End(xlUp).Rownum = InputBox('请输入行数', '程序会按照指定的行数循环')f = Dir(pathn & '\' & '\*.txt')Do While f <> '' Filename = pathn & '\' & f Open Filename For Input As #1 Do While Not EOF(1) For l = 1 To num Line Input #1, s Cells(i + 1, l) = s Next l i = i + 1 Loop Close #1f = Dir()LoopEnd Sub
我们来看看效果,再选择完指定的txt文件之后,会让我们输入一个数字
确定循环的行数,因为我们这里已经确定,4行一循环,所以这里输入4,
然后数据就成功的按照我们的要求汇总在一起了
代码分析
今天的代码还是比较的简单的,如果之前的几节大家已经了解的话,今天还是比较好理解的
num = InputBox('请输入行数', '程序会按照指定的行数循环')
这里还是继续使用inputbox函数来实现交互,输入指定的行数,这里可以灵活输入,根据你实际的数据样式来进行输入
Do While f <> '' Filename = pathn & '\' & f Open Filename For Input As #1 Do While Not EOF(1) For l = 1 To num Line Input #1, s Cells(i + 1, l) = s Next l i = i + 1 Loop Close #1f = Dir()Loop
这段代码就是今天的核心代码
Open Filename For Input As #1
说先我们现在电脑模拟打开一个txt文件,并且将它标记为编号#1
然后开始在txt文件内部循环,如果还没有到达文件的末尾,就进入第二个小循环
For l = 1 To num Line Input #1, s Cells(i + 1, l) = s Next l
这个小循环就是针对我们输入的行数进行循环的
本案例中当我们完成了4行的循环之后,跳出for循环,同时Excel的行数+1
完成一个4行的循环之后,Excel行数才会+1,这个时候如果还没有达到txt的结尾,继续进入下一个txt内部的4行循环
=======================================================