VBA按行读取csv文件与分割合并
VBA按⾏读取csv⽂件与分割合并
'2017年2⽉1⽇05:43:35
'16年想开发的最后⼀个Excel代码经过漫长的酝酿与研究终于编写完毕,解决了超过⼀百万⾏的csv⽂件Excel打不开的问题,⾃动分割为多个sheet,并且数字超过15位不会后⾯全是0。
'也可以⽤于平常打开csv⽂件,速度⽐直接打开快⼀倍,还可以⽤于指定⾏数分割,多⽂件合并,csv批量转Excel。
'
'顺道普及:csv⽂件就是⽤逗号分隔的数据表,有回车或逗号的⽂本还有长数字⽤两个"包围(连续两个表⽰"本⾝)
'xlsx⽂件⼤⼩约csv的50%,打开时间约csv的30%,xlsx压缩可能变⼤,csv压缩后不到10%。
Sub csv分割合并()
selectfiles = Application.GetOpenFilename("," & "*.*", , "打开", , True) '选择⽂件
word里怎么打分数
If TypeName(selectfiles) = "Boolean" Then '若未选择则结束程序运⾏
Exit Sub
End If
关闭功能
st = Time
spt = [A5]
Ln = [B5]
If spt = "" Then spt = ","
If Not (Ln > 0) Then Ln = 1048576 '⽤Not是为了包括⾮数值
Workbooks.Add
li = 2
For Each fp In selectfiles
Set FileObj = CreateObject("Scripting.FileSystemObject")
Set TextObj = FileObj.OpenTextFile(fp) '定义对象,不耗时
If Not TextObj.AtEndOfLine Then '记录并写⼊第⼀个标题⾏
TitleText = Split(TextObj.Readline, spt)
[A1].Resize(1, UBound(TitleText)) = TitleText '在合并⼯作表时也只是替代第⼀⾏
End If
九天揽月的揽是什么意思
Do While Not TextObj.AtEndOfLine
If li > Ln Then '达到⼀定值新建表
Sheets.Add
[A1].Resize(1, UBound(TitleText)) = TitleText
li = 2
End If
Text = Split(TextObj.Readline, spt) '读取⾏并分割
Cells(li, 1).Resize(1, UBound(Text)) = Text '测试15位以上数值会保留
'⽤时:UBound()<;变量<;数字,⽤数组给区域赋值⽐循环快五六倍左右
教师节祝福语英文
'原先有数值会增加⼀倍时间,跟直接打开相等
住宅风水方位
世界上污染最严重的10个城市li = li + 1
Loop
Next
Debug.Print (Time - st) * 24 * 60 * 60
开启功能
End Sub
Sub csv转xlsx()
selectfiles = Application.GetOpenFilename("," & "*.*", , "打开", , True) '选择⽂件
If TypeName(selectfiles) = "Boolean" Then '若未选择则结束程序运⾏
Exit Sub
End If
淘宝如何团购
关闭功能
st = Time
spt = [A5]
Ln = 1048576
If spt = "" Then spt = ","
If Not (Ln > 0) Then Ln = 1048576 '⽤Not是为了包括⾮数值
For Each fp In selectfiles

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。