ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 荔枝jjee

[求助] 超大批量提取txt指定数据到Excel指定列

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-15 08:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liu-aguang 发表于 2014-10-15 07:57
代码设计的是提取文本中最一列数据,如果数据不在最后列要修改代码.

同样的是在最后一列的其它txt还是全是38的问题,那可以设置指定第二列提取码?

TA的精华主题

TA的得分主题

发表于 2014-10-15 08:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
荔枝jjee 发表于 2014-10-15 08:31
同样的是在最后一列的其它txt还是全是38的问题,那可以设置指定第二列提取码?

上传几个出错的文本文件.

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-15 08:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xulubang 发表于 2014-10-14 22:03
公式没这么强的功能!

那该用什么其它方法呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-15 09:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liu-aguang 发表于 2014-10-15 08:36
上传几个出错的文本文件.

我测试几次发现,对于几千行的txt不会出错,但是对于有48万行的txt会出现,运行时出错‘13’类型不匹配的提示,是不是这里两行的代码限制呢?因为大样本传不了附件。你可以把之前的文本数据扩充到几十万行,看看还能提取吗?
Sheets("sheet1").Range("a2").Resize(UBound(arr, 2), UBound(arr)) = Application.Transpose(arr)
    Sheets("sheet2").Range("a2").Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr)

点评

Application.Transpose(arr) 这个貌似不能超过65536  发表于 2014-10-15 09:42

TA的精华主题

TA的得分主题

发表于 2014-10-15 09:41 | 显示全部楼层
首先要把文件名中的pxp 删除,我用的access批量重命名.

奇数,偶数分开两张表。


Option Explicit

Sub a()
Dim cnn As Object, rs As Object, SQL$, Mypath$, MyName$, arr, i, m, K As Integer
Dim brr(1 To 400, 1 To 200), cRR(1 To 400, 1 To 200), J, t As Byte
Mypath = ThisWorkbook.Path & "\"
MyName = Dir(Mypath & "*.TXT")
Application.ScreenUpdating = False
Do While MyName <> ""
    If MyName <> ThisWorkbook.Name Then
        Set cnn = CreateObject("ADODB.CONNECTION")
        cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Mypath & ";Extended Properties=""text;HDR=yes;"""
        SQL = "Select * From [" & MyName & "]"
        arr = cnn.Execute(SQL).GetRows
            If Left(MyName, InStr(MyName, ".") - 1) Mod 2 = 0 Then
                m = 1: J = J + 1
                brr(m, J) = "文件名: " & Left(MyName, InStr(MyName, ".") - 1)
                    For i = 4 To UBound(arr, 2)
                        m = m + 1
                        brr(m, J) = Mid(arr(0, i), 11)
                    Next
                Else
                    K = 1: t = t + 1
                cRR(K, t) = "文件名: " & Left(MyName, InStr(MyName, ".") - 1)
                    For i = 4 To UBound(arr, 2)
                        K = K + 1
                        cRR(K, t) = Mid(arr(0, i), 11)
                    Next
            End If

    End If
    MyName = Dir
Loop
cnn.Close: Set cnn = Nothing
Sheet1.Cells.Clear
Sheet1.[a1].Resize(400, 200) = brr
Sheet2.Cells.Clear
Sheet2.[a1].Resize(400, t) = cRR
Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2014-10-15 09:54 | 显示全部楼层
荔枝jjee 发表于 2014-10-15 09:28
我测试几次发现,对于几千行的txt不会出错,但是对于有48万行的txt会出现,运行时出错‘13’类型不匹配的 ...

代码使用正则提取数据行,它的集合只能容纳65536个数据,所以超过这个数据会出错.要解决它只有改为速度慢一点的算法.
另外,必须明确:要提取的数据是不是都在文本的第二列?第二列与第一列之间的分隔符是否都是制表符?第二列是否只有要提取的数据才是数值数据?文本文件名的数值部分与其它部分是否都是用英文句点分隔?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-15 10:13 | 显示全部楼层
魂断蓝桥 发表于 2014-10-15 09:41
首先要把文件名中的pxp 删除,我用的access批量重命名.

奇数,偶数分开两张表。

弱弱的问问,access批量批量重命名是指去掉pxp吗?这个代码还是在Excel中运行的吧?可不可以请你写个具体的操作步骤呢?谢谢

TA的精华主题

TA的得分主题

发表于 2014-10-15 10:27 | 显示全部楼层
ACCESS 是一个著名的看图软件,这个软件可以批量修改文件名,代码是在excel运行的。



数据及要求.rar (26.67 KB, 下载次数: 53)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-15 10:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liu-aguang 发表于 2014-10-15 09:54
代码使用正则提取数据行,它的集合只能容纳65536个数据,所以超过这个数据会出错.要解决它只有改为速度慢一 ...

嗯嗯,谢谢指教。可是我手工copy的是可以粘贴几十万的数据呢

点评

两码事.  发表于 2014-10-15 10:34

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-15 10:45 | 显示全部楼层
魂断蓝桥 发表于 2014-10-15 10:27
ACCESS 是一个著名的看图软件,这个软件可以批量修改文件名,代码是在excel运行的。

嗯嗯,我试了提示运行错误‘9’,下标越界,方便留个邮箱吗?我发原始数据给你,试试看。这里传不了那么大的附件。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 23:41 , Processed in 0.044685 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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