乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>excel</em>用vba自动提取多个txt文件中指定位置多个字符到...

<em>excel</em>用vba自动提取多个txt文件中指定位置多个字符到...

作者:乔山办公网日期:

返回目录:excel表格制作


通过VBA中的函数sheets(!workbook.worksheet).select,就可以将当前的zd文件指针指向所选的工作薄中的指定工作表。

参数说明:
workbook为工作簿名即文件名
worksheet为工作表名

当文件指针设定好后,就可以对指定文件的指定工作表进行操作了。

19:44开始解答这个问题,那时你还没有上传附件,试试能不能用吧

Sub 批量提取TXT文件指定位置数据()

Dim Fso As Object, oFile As Object
Dim tx, tx0, txk As String
Dim r1, r2 As Integer

r1 = 2 '从第2行开始写入

'将需写入数据的列转换为文本e68a84e8a2ad7a686964616f333格式,防止0开头的数字数据写入错误
[A:A].NumberFormatLocal = "@"
[C:C].NumberFormatLocal = "@"
[E:E].NumberFormatLocal = "@"
[G:G].NumberFormatLocal = "@"
[K:K].NumberFormatLocal = "@"

Set Fso = CreateObject("Scripting.FileSystemObject") '引用fso对象
For Each oFile In Fso.GetFolder(ThisWorkbook.Path & "\数据源\").Files '遍历当前工作簿路径下的数据源文件夹内所有文件
    If oFile.Name Like "*.txt" Then '如果拓展名为TXT
        r2 = 1
        Open oFile For Input As #1 '读取文件
        Do While Not EOF(1) '遍历行至文件尾
            Line Input #1, tx '输出行为字符串
            If Len(Trim(tx)) > 0 Then '如果非空个字符大于0
                If r2 = 1 Then
                    Cells(r1, "A").Value = Mid(tx, 2, 2) '第一行的第2-3个字符放到A列
                    txk = Mid(tx, 2, 2) 'txk用于取K列数据
                End If
                If r2 = 2 Then
                    Cells(r1, "C").Value = Left(Right(tx, 7), 3) '第二行从右往左取7个字符,再取前3个,放到C列
                    txk = txk & Left(Right(tx, 7), 3) 'txk用于取K列数据
                End If
                If r2 = 3 Then Cells(r1, "E").Value = Mid(tx, WorksheetFunction.Find("ABCDEF", tx) + 8, 4) '第三行找到ABCDEF的起始位置,从A向后数8个字符开始取,取4个
                If Left(tx, 6) = "HIJKLM" Then Cells(r1, "G").Value = Left(Right(tx0, 6), 4) '某一行是HIJKLM开头的,该行的上一行数据从右往左取6个字符,再取前4个,放到G列
                If Left(tx, Len(txk)) = txk Then Cells(r1, "K").Value = Mid(tx, 6, 6) '某一行是提取之后的A2&C2中的数据开头的,第6-11个字符放到K2单元格
                tx0 = tx '将此行字符存入临时变量作为上一行
            End If
            r2 = r2 + 1
        Loop
        Close #1
    End If
    r1 = r1 + 1
Next oFile
Set Fso = Nothing

End Sub

GIF动图

要提取的TXT文件的截图


1、在那个文件夹内新建一个.TXT文件(如wenjian.txt),用记事本单开输入
dir> 1.txt
保存退出
将刚才的.TXT(wenjian.txt)更名为.bat文件(wenjian.bat)
双击wenjian.bat文件运行一次,在文件夹内多出一个1.txt文件
打开1.txt文件,将其中的内容粘贴到Excel中,数据——分列处理就可以得到你要的文件名列表e799bee5baa6e58685e5aeb9339了!
2、VBA(2003版)
在那个文件夹下新建Excel文件,打开新建的Excel文件,右击工作表标签(如Sheet1),查看代码——在代码编辑器中输入以下代码
Sub Test()
Dim i As Integer
Dim strPath As String
strPath = ThisWorkbook.Path
With Application.FileSearch
.LookIn = strPath
.SearchSubFolders = True
.Filename = "*.*"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Range("A" & i) = .FoundFiles(i)
Next i
End If
End With
End Sub
回到Excel表格中,工具——宏——宏——选择Sheet1.Test——执行
看看效果吧!

祝你成功解决问题!

TXT、EXCEL样本和具体要求发:

'QQ 1813340428

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网