ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2154|回复: 6

[求助] 一次导入多个txt文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-1-21 18:38 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
         打开以“自选”为开头的txt文件,由于这些文档都是其他系统里面导出的,所以TXT会出现乱码,因此建议使用空格来作为每个单元格的分割线。然后对每个单元格做一个字符判断-有意义的字符通常是以SH、SZ开始,以空格结束。
         希望有高手看看!

文本交集例子.rar

2.87 KB, 下载次数: 49

TA的精华主题

TA的得分主题

发表于 2018-1-21 19:53 | 显示全部楼层
使用fso或者dir遍历文件,判断文件类型及左侧两个文件名字符是什么
然后通过正则表达式提取数据
以上建议供楼主参考

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-21 20:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
       能否写一下代码,我自己是一个新手,一开始是想自己独立完成,所以最近几天一直在参考别人已经写好的一些代码(导入txt文档),不过老是有问题。这才提出来想请高手看看。
      

TA的精华主题

TA的得分主题

发表于 2018-1-21 20:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Option Explicit

Sub test()
  Dim i, filename(), brr, maxrow, arr, j, n
  If Not getfilename(filename, ThisWorkbook.Path, ".txt") Then MsgBox "!": Exit Sub
  ReDim brr(1 To 16 ^ 4, 1 To UBound(filename))
  For i = 1 To UBound(filename)
    Open filename(i) For Input As #1
    arr = StrConv(InputB(LOF(1), 1), vbUnicode)
    Close #1
    arr = Replace(Replace(arr, "SH", "|s"), "SZ", "|z")
    arr = Split(arr, "|"): n = n + 1
    If maxrow < UBound(arr) Then maxrow = UBound(arr)
    For j = 1 To UBound(arr)
      brr(j, n) = Split(arr(j))(0)
      brr(j, n) = IIf(Left(brr(j, n), 1) = "s", "SH", "SZ") & Right(brr(j, n), Len(brr(j, n)) - 1)
  Next j, i
  With [a2]
    .Resize(maxrow + 1, n + 1).ClearContents
    .Resize(maxrow, n) = brr
  End With
End Sub

Function getfilename(filename, pth, mark) As Boolean
  Dim f, n
  If Right(pth, 1) <> "\" Then pth = pth & "\"
  f = Dir(pth & "*.*")
  Do While Len(f) > 0
    If LCase(Right(f, Len(mark))) = LCase(mark) Then
      n = n + 1: ReDim Preserve filename(1 To n)
      filename(n) = pth & f
    End If
    f = Dir
  Loop
  If n > 0 Then getfilename = True
End Function

TA的精华主题

TA的得分主题

发表于 2018-1-21 20:56 | 显示全部楼层
本帖最后由 duquancai 于 2018-1-21 21:29 编辑

Sub 读取文本文件()
    Dim S$(2), arr(), mt, reg As Object, r&(1)
    S(0) = ThisWorkbook.Path: S(1) = Dir(S(0) & "\*.txt")
    Cells.ClearContents
    ReDim arr(1000, 1 To Columns.Count)
    Set reg = CreateObject("VBScript.Regexp")
    reg.Global = True: reg.Pattern = "S[HZ][^\x20]+"
    Do While S(1) <> ""
        If Left(S(1), 2) = "自选" Then
            r(0) = r(0) + 1: r(1) = 0
            arr(0, r(0)) = Left(S(1), InStrRev(S(1), ".") - 1)
            Open S(0) & "\" & S(1) For Input As #1
            S(2) = StrConv(InputB(LOF(1), 1), vbUnicode)
            For Each mt In reg.Execute(S(2))
                r(1) = r(1) + 1
                arr(r(1), r(0)) = mt
            Next
            Close #1
        End If
        S(1) = Dir
    Loop
    Range("a1").Resize(100, 256) = arr
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-21 21:41 | 显示全部楼层
非常完美的实现了我的目标,真的感谢!
ps:看来我最近有的忙了--搞懂这段代码的内容。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-3 22:21 | 显示全部楼层
    还是有一个小问题请帮忙看看,想把文件名写在每一列的第一行,能否看看。

文本交集例子1.rar

12.02 KB, 下载次数: 30

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 14:00 , Processed in 0.040032 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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