Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5095|回复: 23

[已解决]请教,各位高手我想用vba实现读取多个txt文件数据请问怎么实现?

[复制链接]
发表于 2017-6-12 11:04 | 显示全部楼层 |阅读模式
本帖最后由 qinshuai8507 于 2017-6-12 11:52 编辑

我有多个txt文件,如何提取某行的某个数据到excel(数据是以逗号分隔的),然后读取的数据每个占一个单元格横向排列,下一个文件读取到下一行,请问怎么实现呢谢谢!
最佳答案
2017-6-12 15:57
  1. Sub test()
  2. Dim arr, rw%, i%, flm$
  3. On Error Resume Next
  4. Sheet1.UsedRange.ClearContents
  5. flm = Dir(ThisWorkbook.Path & "/*.txt")
  6. Do While flm <> ""
  7.     rw = rw + 1
  8.     Open ThisWorkbook.Path & "/" & flm For Input As #1
  9.         arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  10.     Close #1
  11.     With Sheet1
  12.            .Cells(rw, 1) = Split(arr(1), ",")(0)
  13.            .Cells(rw, 2) = Split(arr(6), ",")(2)
  14.            .Cells(rw, 3) = Split(arr(6), ",")(6)
  15.     End With
  16.     flm = Dir
  17. Loop
  18. End Sub
复制代码
自己照着改改吧

shuju.zip

539 Bytes, 下载次数: 7

发表于 2017-6-12 11:32 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2017-6-12 11:53 | 显示全部楼层
回复

使用道具 举报

发表于 2017-6-12 13:27 | 显示全部楼层
  1. Sub tt()
  2. Dim arr, brr, i%, flm$
  3. Dim Col%, Rw%
  4. On Error Resume Next
  5. flm = Dir(ThisWorkbook.Path & "/*.txt")
  6. Do While flm <> ""
  7.     Rw = Rw + 1
  8.     Open flm For Input As #1
  9.         arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  10.     Close #1
  11.     For i = 0 To UBound(arr)
  12.         brr = Split(arr(i), ",")
  13.         If i = 0 Then
  14.             Worksheets("sheet1").Cells(Rw, 1).Resize(1, UBound(brr) + 1) = brr
  15.         Else
  16.             Col = Worksheets("sheet1").Cells(Rw, Columns.Count).End(1).Column
  17.             Worksheets("sheet1").Cells(Rw, Col + 1).Resize(1, UBound(brr) + 1) = brr
  18.         End If
  19.     Next
  20.     flm = Dir
  21. Loop
  22. End Sub
复制代码

txt_excel.zip

16.65 KB, 下载次数: 21

回复

使用道具 举报

 楼主| 发表于 2017-6-12 15:03 | 显示全部楼层

你好大侠,我试了代码没运行没有提示错误,但是没有提取出数据来,运行后还是空白表格,请问是哪里的问题?
回复

使用道具 举报

发表于 2017-6-12 15:20 | 显示全部楼层
本帖最后由 苏子龙 于 2017-6-12 15:24 编辑
  1. Sub ttt()
  2. Dim arr, rw%, i%, flm$
  3. 'On Error Resume Next
  4. flm = Dir(ThisWorkbook.Path & "/*.txt")
  5. Do While flm <> ""
  6.     rw = rw + 1
  7.     Open ThisWorkbook.Path & "/" & flm For Input As #1
  8.         arr = Split(Replace(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf, ","), ",")
  9.     Close #1
  10.     For i = 0 To UBound(arr)
  11.           Worksheets("sheet1").Cells(rw, 1 + i) = arr(i)
  12.      Next
  13.     flm = Dir
  14. Loop
  15. End Sub
复制代码
改,前面 Open ThisWorkbook.Path & "/" & flm For Input As #1 少了这个

txttoexcel.zip

21.44 KB, 下载次数: 5

回复

使用道具 举报

 楼主| 发表于 2017-6-12 15:28 | 显示全部楼层
本帖最后由 qinshuai8507 于 2017-6-12 15:32 编辑
苏子龙 发表于 2017-6-12 15:20
改,前面 Open ThisWorkbook.Path & "/" & flm For Input As #1 少了这个

大侠完美运行了,但是提取的数据是全部提取了,我想提取第2行第一个、第7行的第三个、第7行的第8个,提取这三个数据到指定位置还需要如何修改呢?

数据综合表.zip

7.68 KB, 下载次数: 8

回复

使用道具 举报

发表于 2017-6-12 15:38 | 显示全部楼层
要不再开一帖,详细说明吧,太复杂,我也不会,让其他大神来处理吧
txt.png
回复

使用道具 举报

 楼主| 发表于 2017-6-12 15:41 | 显示全部楼层
本帖最后由 qinshuai8507 于 2017-6-12 15:43 编辑
苏子龙 发表于 2017-6-12 15:38
要不再开一帖,详细说明吧,太复杂,我也不会,让其他大神来处理吧

数错了不好意思,是第7行第7个,大侠的代码已经很完美了,只要能把指定数据读出来就行,我自己再粘贴也行,再给指点下就ok了
回复

使用道具 举报

发表于 2017-6-12 15:57 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2. Dim arr, rw%, i%, flm$
  3. On Error Resume Next
  4. Sheet1.UsedRange.ClearContents
  5. flm = Dir(ThisWorkbook.Path & "/*.txt")
  6. Do While flm <> ""
  7.     rw = rw + 1
  8.     Open ThisWorkbook.Path & "/" & flm For Input As #1
  9.         arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  10.     Close #1
  11.     With Sheet1
  12.            .Cells(rw, 1) = Split(arr(1), ",")(0)
  13.            .Cells(rw, 2) = Split(arr(6), ",")(2)
  14.            .Cells(rw, 3) = Split(arr(6), ",")(6)
  15.     End With
  16.     flm = Dir
  17. Loop
  18. End Sub
复制代码
自己照着改改吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 21:56 , Processed in 0.320495 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表