R

【Excel】批量导入某个目录下的CSV到同一Excel

2018-01-12  本文已影响1429人  冷漠热情

前几天同事妹子突然在群里@我,问我懂不懂宏,她经常都要把导出来的一堆csv格式数据导入到同一个Excel里处理、保存。然后我就帮她写了个宏,但是她又不懂怎么用

于是就有了上一篇推文【office技巧】宏

    原本给她写的是通过【打开一个CSV,复制到ActiveSheet里。接着打开下一个CSV】循环。

    但有个缺点:默认情况下CSV用Excel直接打开,长串数字会自动转成科学记数法存储,而且过长的后面全部变成0000了。。。

    于是昨晚又彻夜不眠地改了一个通用型的版本,V2.0,哈哈哈。

1、宏代码

这个功能通过宏来实现,分两种模式:

1、导入到Excel的同一个工作表中;

2、导入到Excel的不同工作表,并以CSV名称命名sheet

Sub ImportMultiCSV()

Application.ScreenUpdating = False

Dim myFile$, myPath$, i%, Arraycol%, myArray() As Integer, independent%

With Application.FileDialog(msoFileDialogFolderPicker)

 .Title = "选择目标文件夹"

 If .Show = -1 Then

myPath = .SelectedItems(1)

 Else

 Exit Sub

 End If

End With

myPath = myPath & "\"

myFile = Dir(myPath & "*.csv")

Arraycol = InputBox("导入的csv有几列:")

'myAPP.Visible = True '是否显示打开文档

ReDim myArray(Arraycol)

For i = 0 To Arraycol

    myArray(i) = 2 '或xlTextFormat

Next

independent = MsgBox("『模式1』:导入到一张表=是" & Chr(10) & "『模式2』:分开各表=否", vbYesNo) 'Yes=6, No=7

i = 0

Do While myFile <> ""

 If independent = 7 Then 'Split

 Set sh = Sheets.Add(, Sheets(Sheets.Count))

 Else

 Set sh = ActiveSheet

 End If

 With sh.QueryTables.Add(Connection:="TEXT;" & myPath & myFile _

 , Destination:=sh.Cells(i + 1, 1))

 .TextFileParseType = xlDelimited

 .TextFileCommaDelimiter = True

 .TextFileColumnDataTypes = myArray

 .Refresh

 End With

 If independent = 7 Then 'Split

sh.Name = Left(myFile, Len(myFile) - 4)

 Else

 If i > 0 Then ActiveSheet.Rows(i + 1).Delete 'delete title

i = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(3).Row 'update to newest end row

 End If

myFile = Dir

Loop

Application.ScreenUpdating = True

MsgBox ("全部加载完毕!")

End Sub

2、使用教学

例如我要将【新建文件夹】内的CSV全部导入:

傻瓜式步骤:

静态步骤:

然后选择导入的CSV数据有多少列(如原始列数有n列,则输入>=n的数字都可以。例如我的素材有8列,则输入8或以上数字都可以):

『模式1』所有CSV数据汇总在同一个sheet中。

『模式2』每个CSV各自成一个sheet。

『模式1』结果:

『模式2』结果:

3、动图演示

结束语

本次的【宏】可以运用到CSV、TXT在内的所有文本格式数据导入,只要将代码里的〖*.csv〗改成〖*.txt〗就行了。

微信搜索公众号@圣创杂学堂,即可获取每天更新

原创不易,转载请保留出处。

上一篇 下一篇

猜你喜欢

热点阅读