选择多个csv文件的一列,并以可识别的顺序合并到一个文件中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择多个csv文件的一列,并以可识别的顺序合并到一个文件中相关的知识,希望对你有一定的参考价值。

我有一个包含260个文件的文件夹,所有文件都具有相同的数据格式。

我想在每个列中选择E列第25行-Row124,并将它们合并到新的csv文件中。

enter image description here

我使用此链接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 文件中,每行包含一个常量

怎么用命令行把多个csv文件合并成一个xls或者xlsx文件

怎么把两列合并到一列

Excle如何将多个同ID的值,合并到一个单元格内,并以逗号隔开

使用 glob 读取多个 CSV 导致顺序错误 [重复]

在antd vue的表格显示中,合并多个字段到一列及自定义显示样式