Excel精英培训网

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

[已解决]如何用VBA将txt文件自动有序导入excel

[复制链接]
发表于 2016-2-17 18:40 | 显示全部楼层 |阅读模式
本帖最后由 neicezhanghao 于 2016-2-17 18:46 编辑

跪求各位大神 大哥 大姐 大叔 大神 大爷 大妈 好心雷锋 帮帮忙 小弟感激不尽 跪谢!!!

【VBA实现需求】
(1)
要求1:TXT内容导入后不要删除或清楚模块1中的内容
(2)

要求2:TXT内容导入后,模块2中选中全部区域 点击  
 定位条件 空值  可以找到所有空值
(3)
要求3:TXT文本文件路径和工作博路径相同,导入时  
直接导入内容即可,不要再选择打开文件浏览对话框,找到上述txt文件


最佳答案
2016-2-17 21:07
请测试!
Sub wanao2008()
    Dim txtLine, FileObj, TextObj, FilePath
    Dim regEX As Object, mc1, mc2, hs As Integer
    Dim MyStr As String, Lie As Integer
    Set regEX = CreateObject("VBSCRIPT.REGEXP")
    Set FileObj = CreateObject("Scripting.FileSystemObject")
    regEX.Global = True
    regEX.Pattern = "\t"
    '设置模块2的起始列和行
    Lie = 10
    hs = 3
    FilePath = ThisWorkbook.Path & "\需要导入的内容.txt"
    Set TextObj = FileObj.OpenTextFile(FilePath, 1, True)
    Do While Not TextObj.AtEndOfLine
        '读取行内容
        txtLine = TextObj.readline
        Set mc2 = regEX.Execute(txtLine)
        If Cells(hs, mc2.Count + Lie) = "" Then
            Cells(hs, mc2.Count + Lie) = Trim(txtLine)
        Else
            Cells(Cells(20, mc2.Count + Lie).End(xlUp).Row + 1, mc2.Count + Lie) = Trim(txtLine)
        End If
     Loop
    TextObj.Close
    Set TextObj = Nothing
    Set FileObj = Nothing
End Sub

TXT文本 TAB分列

TXT文本 TAB分列

模块2中导入后效果

模块2中导入后效果

234.zip

8.62 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-2-17 21:07 | 显示全部楼层    本楼为最佳答案   
请测试!
Sub wanao2008()
    Dim txtLine, FileObj, TextObj, FilePath
    Dim regEX As Object, mc1, mc2, hs As Integer
    Dim MyStr As String, Lie As Integer
    Set regEX = CreateObject("VBSCRIPT.REGEXP")
    Set FileObj = CreateObject("Scripting.FileSystemObject")
    regEX.Global = True
    regEX.Pattern = "\t"
    '设置模块2的起始列和行
    Lie = 10
    hs = 3
    FilePath = ThisWorkbook.Path & "\需要导入的内容.txt"
    Set TextObj = FileObj.OpenTextFile(FilePath, 1, True)
    Do While Not TextObj.AtEndOfLine
        '读取行内容
        txtLine = TextObj.readline
        Set mc2 = regEX.Execute(txtLine)
        If Cells(hs, mc2.Count + Lie) = "" Then
            Cells(hs, mc2.Count + Lie) = Trim(txtLine)
        Else
            Cells(Cells(20, mc2.Count + Lie).End(xlUp).Row + 1, mc2.Count + Lie) = Trim(txtLine)
        End If
     Loop
    TextObj.Close
    Set TextObj = Nothing
    Set FileObj = Nothing
End Sub

评分

参与人数 1 +1 收起 理由
neicezhanghao + 1 很给力

查看全部评分

回复

使用道具 举报

发表于 2016-2-17 21:49 | 显示全部楼层
你可以自己改,我告诉你个方法:
由于没想到你的数据会操作20行,所以我设置了个常量20:
Cells(Cells(20, mc2.Count + Lie).End(xlUp).Row + 1, mc2.Count + Lie) = Trim(txtLine)
这个20个你看着改吧

评分

参与人数 1 +1 收起 理由
neicezhanghao + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-2-17 19:13 | 显示全部楼层
跪求各位大神 大哥 大姐 大叔 大神 大爷 大妈 好心雷锋 帮帮忙 小弟感激不尽 跪谢!!!
回复

使用道具 举报

 楼主| 发表于 2016-2-17 21:35 | 显示全部楼层
wanao2008 发表于 2016-2-17 21:07
请测试!
Sub wanao2008()
    Dim txtLine, FileObj, TextObj, FilePath

首先 谢谢您的帮助

我测试了 非常强大 但是由于我疏忽了一个要求 再帮帮我把 麻烦您了!
需要导入的内容 不固定的 我增加内容后 不对了!帮我看看啊 大哥!



4.png

234.zip

17.09 KB, 下载次数: 15

回复

使用道具 举报

 楼主| 发表于 2016-2-17 21:56 | 显示全部楼层
wanao2008 发表于 2016-2-17 21:49
你可以自己改,我告诉你个方法:
由于没想到你的数据会操作20行,所以我设置了个常量20:
Cells(Cells(2 ...

好的 谢谢您  非常感谢 麻烦您了!
回复

使用道具 举报

发表于 2016-2-17 22:30 | 显示全部楼层
neicezhanghao 发表于 2016-2-17 21:56
好的 谢谢您  非常感谢 麻烦您了!

还是不太对,这个程序里用了正则表达式,因为我也是刚学,制作中会有问题。
再一个,你提供的新文本文件和一开始的不一样,新的文本文件数字后面带制表符。
我是通过制表符的个数来计列的,这样,它们都有4个制表符,所以就都到一列去了。
等明天我再看看,今天睡觉了!
要不你请高手改一下正则吧?
再见!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 23:41 , Processed in 0.209487 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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