选择多个csv文件的一列,并以可识别的顺序合并到一个文件中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择多个csv文件的一列,并以可识别的顺序合并到一个文件中相关的知识,希望对你有一定的参考价值。
我有一个包含260个文件的文件夹,所有文件都具有相同的数据格式。
我想在每个列中选择E列第25行-Row124,并将它们合并到新的csv文件中。
我使用此链接https://answers.microsoft.com/en-us/msoffice/forum/all/using-excel-macros-to-extract-data-from-a-spe中提供的代码...
但是,它们没有按照我想要的顺序合并,因此输出的csv文件包含我无法确定哪个列来自哪个文件的数据。
因为我的文件全都是数字名称,例如1520 + 0-2、1520 + 0-4 ... 1520 + 15-2、1520 + 15-4 ...并非按字母顺序排列。
我为案例修改的代码,
Sub Merge_All_CSV_in_a_new_CSV()
Const sC$ = "E" '<< search in column E
Const N As Integer = 25 '<< csv data from row 25 up to last row
Const SourcePath = "\filestore.soton.ac.ukusersqz1d17mydesktopAnisotropyTest1017" '<< change path as needed
Const TargetPath = "\filestore.soton.ac.ukusersqz1d17mydesktopmerge-anisoropy.csv" '<< change path and file name as needed
Dim wb As Workbook, wb1 As Workbook
Set wb = ThisWorkbook
Application.ScreenUpdating = False
Dim L As Long, c As Long
Dim sFile As String
sFile = Dir(SourcePath & "*.csv")
wb.Sheets.Add before:=wb.Sheets(1)
c = 1
Do While sFile <> ""
Set wb1 = Workbooks.Open(SourcePath & sFile, xlDelimited, local:=True)
L = wb1.Sheets(1).UsedRange.Rows.Count
wb1.Sheets(1).Range(Cells(N, sC), Cells(L, sC)).Copy wb.Sheets(1).Cells(1, c)
c = c + 1
wb1.Close False
sFile = Dir()
Loop
Application.DisplayAlerts = False
wb.Sheets(1).Copy
ActiveWorkbook.SaveAs Filename:=TargetPath, FileFormat:=xlCSV, local:=True
ActiveWorkbook.Close False
wb.Sheets(1).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
此代码如何按我想要的顺序运行。
答案
为了解决这个问题,一种可能的解决方案(如果它对您有用)是在第1行中添加文件名,并将其余数据粘贴到第2行中。
非常容易实现-更改
wb1.Sheets(1).Range(Cells(N, sC), Cells(L, sC)).Copy wb.Sheets(1).Cells(1, c)
to
wb.Sheets(1).Cells(1, c).Value = sFile
wb1.Sheets(1).Range(Cells(N, sC), Cells(L, sC)).Copy wb.Sheets(1).Cells(2, c)
以上是关于选择多个csv文件的一列,并以可识别的顺序合并到一个文件中的主要内容,如果未能解决你的问题,请参考以下文章
怎么用命令行把多个csv文件合并成一个xls或者xlsx文件