Excel精英培训网

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

[已解决]excel 读取文本

[复制链接]
发表于 2015-1-23 12:25 | 显示全部楼层 |阅读模式

pv                           RTMS_ID Lane Class Speed[km/h] Length[m] Dwell
pv                           --------------------------------------------------
pv  18 01 2015 19:20:51.990        1   3    Sm     66        3.6         20
pv  18 01 2015 19:20:52.480        1   1   Med     38        5.8         55
pv  18 01 2015 19:20:53.280        1   2    Sm     51        3.0         22

18 01 2015 19:20:55
MESSAGE NO. 227      VOLUME:   1    1    1   
                        MED:   1    0    0   
                      LARGE:   0    0    0   
                      TRUCK:   0    0    0   
STATION ID. 1     OCCUPANCY:   11.0 4.4  4.0  
FWDLK SPEED ?   SIDEFRD SPD:   38   51   66    Dir. 0 V. 120 H. 0
                    HEADWAY:   12.9 1.8  23.0   

文本里的数据如上,我想在excel里输出
    A    B      C     D                         E   F     G       H          I          J
1 18 01 2015 19:20:51.990        1   3    Sm     66        3.6       20
2  18 01 2015 19:20:52.480        1   1   Med     38        5.8      55
3  ......
应该怎么宏

最佳答案
2015-1-23 18:32
  1. Sub Macro1()
  2. Dim arr(1 To 20000, 1 To 1), s&
  3. Application.ScreenUpdating = False
  4. Application.DisplayAlerts = False
  5. ActiveSheet.UsedRange.ClearContents
  6. Open ThisWorkbook.Path & "\求助.txt" For Input As #1
  7.     w = Split(StrConv(InputB(LOF(1), #1), vbUnicode), vbCrLf)
  8. Close #1
  9. For i = 0 To UBound(w)
  10.     If w(i) Like "pv  18*" Then
  11.         s = s + 1
  12.         Cells(s, 1) = w(i)
  13.         arr(s, 1) = s
  14.     End If
  15.     If w(i) Like "*OCCUPANCY:*" Then
  16.         Cells(s, "m") = Trim(Split(w(i), "OCCUPANCY:")(1))
  17.     End If
  18. Next
  19. [a:a].TextToColumns [a1], Space:=True, Other:=False
  20. [m:m].TextToColumns [m1], Space:=True, Other:=False
  21. Range("a1").Resize(s) = arr
  22. Application.DisplayAlerts = True
  23. Application.ScreenUpdating = True
  24. End Sub
复制代码

求助.zip

742 Bytes, 下载次数: 4

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-1-23 12:43 | 显示全部楼层
本帖最后由 baksy 于 2015-1-23 12:53 编辑

先把文本复制到excel表中,再用公式处理。
公式在sheet1表格中,结果在sheet2.

Book1.rar

9.45 KB, 下载次数: 5

回复

使用道具 举报

发表于 2015-1-23 13:33 | 显示全部楼层
………………

Downloads.zip

9.29 KB, 下载次数: 3

回复

使用道具 举报

 楼主| 发表于 2015-1-23 16:31 | 显示全部楼层
baksy 发表于 2015-1-23 12:43
先把文本复制到excel表中,再用公式处理。
公式在sheet1表格中,结果在sheet2.

谢谢。  我数据比较多,你这种方式不太适合我,不过还是很感谢你的帮忙
回复

使用道具 举报

 楼主| 发表于 2015-1-23 16:41 | 显示全部楼层
dsmch 发表于 2015-1-23 13:33
………………

谢谢, 我之前忘了,还有一个数据要提取, 大神能帮再看下吗。      

我需要把OCCUPANCY的数据也读取出来

求助.zip

10.93 KB, 下载次数: 2

回复

使用道具 举报

发表于 2015-1-23 16:41 | 显示全部楼层
厉害,,,,
回复

使用道具 举报

发表于 2015-1-23 18:32 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr(1 To 20000, 1 To 1), s&
  3. Application.ScreenUpdating = False
  4. Application.DisplayAlerts = False
  5. ActiveSheet.UsedRange.ClearContents
  6. Open ThisWorkbook.Path & "\求助.txt" For Input As #1
  7.     w = Split(StrConv(InputB(LOF(1), #1), vbUnicode), vbCrLf)
  8. Close #1
  9. For i = 0 To UBound(w)
  10.     If w(i) Like "pv  18*" Then
  11.         s = s + 1
  12.         Cells(s, 1) = w(i)
  13.         arr(s, 1) = s
  14.     End If
  15.     If w(i) Like "*OCCUPANCY:*" Then
  16.         Cells(s, "m") = Trim(Split(w(i), "OCCUPANCY:")(1))
  17.     End If
  18. Next
  19. [a:a].TextToColumns [a1], Space:=True, Other:=False
  20. [m:m].TextToColumns [m1], Space:=True, Other:=False
  21. Range("a1").Resize(s) = arr
  22. Application.DisplayAlerts = True
  23. Application.ScreenUpdating = True
  24. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:19 , Processed in 0.505136 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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