ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

如何提取多个TXT的指定内容放在EXCEL里

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-11 10:51 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()         '//2024.4.11
  2.     Set fso = CreateObject("scripting.filesystemobject")
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     Application.ScreenUpdating = False
  5.     Set sh = ThisWorkbook.Sheets("Sheet1")
  6.     p = ThisWorkbook.Path & ""
  7.     ReDim brr(1 To 100000, 1 To 1)
  8.     On Error Resume Next
  9.     For Each f In fso.GetFolder(p).Files
  10.         If LCase(f.Name) Like "*.txt" Then
  11.             fn = fso.GetBaseName(f)
  12.             Set wb = Workbooks.Open(f, 0)
  13.             n = 0
  14.             d.RemoveAll
  15.             arr = wb.Sheets(1).UsedRange
  16.             r = UBound(arr)
  17.             wb.Close 0
  18.             For i = 7 To UBound(arr)
  19.                 If InStr(arr(i, 1), "R10X") Then n = n + 1
  20.                 d(n) = i + 1
  21.             Next
  22.             t = d.items
  23.             For k = 0 To d.Count
  24.                 r1 = d(k)
  25.                 If k = d.Count Then r2 = r Else r2 = d(k + 1) - 1
  26.                 m = m + 1
  27.                 brr(m, 1) = arr(r1, 1)
  28.                 For x = r1 + 1 To r2
  29.                     If InStr(arr(x, 1), "R=") Then
  30.                         m = m + 1
  31.                         brr(m, 1) = arr(x, 1)
  32.                     End If
  33.                 Next
  34.             Next
  35.         End If
  36.     Next f
  37.     With sh
  38.         .UsedRange.Offset(1) = ""
  39.         .[a2].Resize(m, 1) = brr
  40.     End With
  41.     Application.ScreenUpdating = True
  42.     MsgBox "OK!"
  43. End Sub


复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-11 11:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ykcbf1100 发表于 2024-4-11 10:51
附件供参考。。。

image.png 大佬,想要实现这样的要求,望解答,谢谢

TA的精华主题

TA的得分主题

发表于 2024-4-11 12:27 | 显示全部楼层
  1. 'WPS 要安装 AccessDatabaseEngine.exe   下载地址 https://www.onlinedown.net/soft/1180584.htm

  2. Sub test1()
  3.   Dim ar(1 To 200, 1 To 1000), br, Conn As Object, Flag As Boolean
  4.   Dim strPath As String, strFile As String, SQL As String
  5.   Dim i As Long, j As Long, k As Long
  6.   Dim rowSize As Long, colSize As Long
  7.   
  8.   Cells.ClearContents
  9. Application.ScreenUpdating = False
  10.   
  11.   strPath = ThisWorkbook.Path & "\"
  12.   Set Conn = CreateObject("ADODB.Connection")
  13.   'Conn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Extended Properties='text;HDR=NO;FMT=Delimited;CharacterSet=65001';Data Source=" & strPath
  14.   With Conn
  15.     If Application.Version < 12 Or InStr(Application.Path, "WPS") > 0 Then
  16.       .Provider = "Microsoft.Jet.OLEDB.4.0"
  17.     Else
  18.       .Provider = "Microsoft.ACE.OLEDB.12.0"
  19.     End If
  20.     .ConnectionString = "Data Source=" & strPath & ";Extended Properties='text;HDR=NO;FMT=CSVDelimited;CharacterSet=65001';"
  21.     .Open
  22.   End With
  23.   
  24.   rowSize = 1
  25.   ar(rowSize, 1) = "LOG名称"
  26.   ar(rowSize, 2) = "坐标"
  27.   For j = 3 To UBound(ar, 2)
  28.     ar(rowSize, j) = "R" & j - 2
  29.   Next
  30.   
  31.   strFile = Dir(strPath & "*.txt")
  32.   
  33.   Do
  34.     SQL = "SELECT * FROM [" & strFile & "] WHERE F1 LIKE '%,x=%BIN=%y=%' OR F1 LIKE '%R%ohm'"
  35.     br = Conn.Execute(SQL).GetRows
  36.     For j = 0 To UBound(br, 2)
  37.       If br(0, j) Like "*,x=*BIN=*y=*" Then
  38.         Flag = False
  39.         rowSize = rowSize + 1
  40.         ar(rowSize, 1) = Split(strFile, ".txt")(0)
  41.         ar(rowSize, 2) = Mid(br(0, j), InStr(br(0, j), ",") + 1)
  42.       End If
  43.       If br(0, j) Like "R10X=*ohm" Then
  44.         Flag = True
  45.         j = j + 1
  46.         k = 2
  47.       End If
  48.       If Flag Then
  49.         If br(0, j) Like "R=*ohm" Then
  50.           k = k + 1
  51.           ar(rowSize, k) = Split(Split(br(0, j), "=")(1), Chr(32))(0)
  52.         End If
  53.         If k > colSize Then colSize = k
  54.       End If
  55.     Next
  56.     strFile = Dir
  57.   Loop While Len(strFile)
  58.   
  59.   Range("A1").Resize(rowSize, colSize) = ar
  60.   
  61.   Conn.Close
  62.   Set Conn = Nothing
  63.   Application.ScreenUpdating = True
  64.   Beep
  65. End Sub
复制代码
测试.zip (29.49 KB, 下载次数: 2)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-11 16:38 | 显示全部楼层
郑同学66 发表于 2024-4-11 09:36
大佬,请问一下为什么在运行大数据的时候这个会显示错误,还有在单运行横排的时候只显示一行(应该显示一 ...

我调试了一下,可以实现我想要的功能了,感谢大佬们的耐心指教!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-2 00:58 , Processed in 0.035993 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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