Excel精英培训网

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

[已解决]高难度导入TXT数据

[复制链接]
发表于 2015-3-29 06:22 | 显示全部楼层 |阅读模式
本帖最后由 张雄友 于 2015-3-30 18:10 编辑

高难度导入TXT数据,已模拟部分,但找不到办法。
最佳答案
2015-3-30 11:11
确实比较难,主要是大多数数据全在一行内的,只能用月份分解。看看附件是否可行。
  1. Sub Macro1()
  2.     yf = Array("Jan.", "Feb.", "Mar.", "Apr.", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec.")
  3.     Dim arr(1 To 1000, 1 To 3)
  4.     Dim y(1000)
  5.     Open ThisWorkbook.Path & "\3月份.txt" For Input As #1
  6.     On Error Resume Next
  7.     Do While Not EOF(1)
  8.         Line Input #1, txt    '读入每行
  9.         For i = 0 To UBound(yf)        '月份前加分隔符
  10.             txt = Replace(txt, yf(i), "///" & yf(i))
  11.         Next
  12.         txrr = Split(txt, "///")        '分隔月份
  13.         For i = 0 To UBound(txrr)
  14.             n = n + 1     '逐条录入
  15.             x = Trim(txrr(i))
  16.             y(n) = Split(x, " ")(UBound(Split(x, " ")))         '最末的数值(下一条月份前的序号)
  17.             x = Left(x, Len(x) - Len(y(n)))        '本条去掉最末的数值
  18.             If n = 1 Then
  19.                 arr(n, 1) = x
  20.             Else
  21.                 xx = y(n - 1) & " " & x
  22.                 For k = 1 To 8: xx = Replace(xx, "  ", " "): Next     '去掉双空格
  23.                 a = Split(xx, " ")
  24.                 arr(n, 1) = a(0): arr(n, 2) = "'" & a(1) & " " & a(2)
  25.                 arr(n, 3) = Trim(Mid(xx, Len(a(0) & a(1) & a(2)) + 3))
  26.             End If
  27.         Next
  28.     Loop
  29.     Close #1
  30.     With Sheet2
  31.         .Cells.Clear
  32.         .[a1].Resize(n, 3) = arr
  33.         .[a2].Resize(n - 1, 3).Sort key1:=.[a2]
  34.         For r = n To 2 Step -1
  35.             If .Cells(r, 2) Like "*---*" Or .Cells(r, 2) Like "*No.*" Then .Rows(r).Delete
  36.         Next
  37.     End With
  38. End Sub
复制代码

导入TXT数据.rar

160.36 KB, 下载次数: 42

 楼主| 发表于 2015-3-29 17:27 | 显示全部楼层
回复

使用道具 举报

发表于 2015-3-30 11:11 | 显示全部楼层    本楼为最佳答案   
确实比较难,主要是大多数数据全在一行内的,只能用月份分解。看看附件是否可行。
  1. Sub Macro1()
  2.     yf = Array("Jan.", "Feb.", "Mar.", "Apr.", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec.")
  3.     Dim arr(1 To 1000, 1 To 3)
  4.     Dim y(1000)
  5.     Open ThisWorkbook.Path & "\3月份.txt" For Input As #1
  6.     On Error Resume Next
  7.     Do While Not EOF(1)
  8.         Line Input #1, txt    '读入每行
  9.         For i = 0 To UBound(yf)        '月份前加分隔符
  10.             txt = Replace(txt, yf(i), "///" & yf(i))
  11.         Next
  12.         txrr = Split(txt, "///")        '分隔月份
  13.         For i = 0 To UBound(txrr)
  14.             n = n + 1     '逐条录入
  15.             x = Trim(txrr(i))
  16.             y(n) = Split(x, " ")(UBound(Split(x, " ")))         '最末的数值(下一条月份前的序号)
  17.             x = Left(x, Len(x) - Len(y(n)))        '本条去掉最末的数值
  18.             If n = 1 Then
  19.                 arr(n, 1) = x
  20.             Else
  21.                 xx = y(n - 1) & " " & x
  22.                 For k = 1 To 8: xx = Replace(xx, "  ", " "): Next     '去掉双空格
  23.                 a = Split(xx, " ")
  24.                 arr(n, 1) = a(0): arr(n, 2) = "'" & a(1) & " " & a(2)
  25.                 arr(n, 3) = Trim(Mid(xx, Len(a(0) & a(1) & a(2)) + 3))
  26.             End If
  27.         Next
  28.     Loop
  29.     Close #1
  30.     With Sheet2
  31.         .Cells.Clear
  32.         .[a1].Resize(n, 3) = arr
  33.         .[a2].Resize(n - 1, 3).Sort key1:=.[a2]
  34.         For r = n To 2 Step -1
  35.             If .Cells(r, 2) Like "*---*" Or .Cells(r, 2) Like "*No.*" Then .Rows(r).Delete
  36.         Next
  37.     End With
  38. End Sub
复制代码

导入TXT数据.rar

168.94 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2015-3-30 21:06 | 显示全部楼层
grf1973 发表于 2015-3-30 11:11
确实比较难,主要是大多数数据全在一行内的,只能用月份分解。看看附件是否可行。

不对的,第一行就不对了,参看模拟效果,第三列是很长的:


360截图20150330210348906.jpg
回复

使用道具 举报

发表于 2015-3-31 05:00 | 显示全部楼层
好高端
回复

使用道具 举报

发表于 2015-3-31 09:14 | 显示全部楼层
就你示例中的txt文件,实在没办法。除非pdf转txt时左右分开还有可能。
回复

使用道具 举报

发表于 2015-3-31 09:18 | 显示全部楼层
下面是左右列分开的。就是先选择左列文本,粘贴到Txt文件,再选择右列文本粘贴到Txt文件。这样要好处理得多。

导入TXT数据.rar

172.05 KB, 下载次数: 5

回复

使用道具 举报

 楼主| 发表于 2015-3-31 18:19 | 显示全部楼层
grf1973 发表于 2015-3-31 09:18
下面是左右列分开的。就是先选择左列文本,粘贴到Txt文件,再选择右列文本粘贴到Txt文件。这样要好处理得多 ...

这样做当然可以,问题是:先选择左列文本,粘贴到Txt文件,再选择右列文本粘贴到Txt文件,

这个怎么做的?有动画或者步骤?
回复

使用道具 举报

发表于 2015-4-1 10:21 | 显示全部楼层
一般的Pdf阅读器都有选择区域和读取文本功能的
1.gif

评分

参与人数 1 +6 收起 理由
张雄友 + 6 太强大了。

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 21:56 , Processed in 0.539498 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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