重新排列多个Excel文件中的列

我有超过100个.xlsx扩展名的excel文件,所有文件中的列都没有排列顺序,我想重新安排列顺序按照我的模板,我想将所有文件中的数据附加到一个输出文件。

我已经尝试了这个链接中的解决scheme使用VBA重新排列多个Excel文件中的列,并没有奏效。

以下是示例文件的标题供参考。

文件1

标题1,Heading2,Heading3

文件2

Heading2,标题1,Heading5,Heading7

模板文件

标题1,Heading2,Heading3,Heading4,Heading5,Heading6,Heading7

预期的输出文件

文件名,标题1,Heading2,Heading3,Heading4,Heading5,Heading6,Heading7

假设你在工作表(1)上的每个文件都是这样做的:

Option Explicit Sub ColumnMover() Dim i As Integer, j As Integer, k As Integer, m As Integer, n As Integer Dim mDirs As String Dim path As String Dim OutFile As Variant, SrcFile As Variant Dim MyObj As Object, MySource As Object, file As Variant OutFile = ActiveWorkbook.Name mDirs = "c:\" 'your path here with \ in the end file = Dir(mDirs) While (file <> "") path = mDirs + file Workbooks.Open (path) SrcFile = ActiveWorkbook.Name n = 2 While Workbooks(OutFile).Sheets(1).Cells(n, 1).Value <> "" n = n + 1 Wend i = 2 While (Workbooks(OutFile).Sheets(1).Cells(1, i).Value <> "") k = n j = 1 While Workbooks(SrcFile).Sheets(1).Cells(1, j).Value <> Workbooks(OutFile).Sheets(1).Cells(1, i).Value And _ Workbooks(SrcFile).Sheets(1).Cells(1, j).Value <> "" j = j + 1 Wend If Workbooks(SrcFile).Sheets(1).Cells(1, j).Value = Workbooks(OutFile).Sheets(1).Cells(1, i).Value Then m = 2 While Workbooks(SrcFile).Sheets(1).Cells(m, j).Value <> "" Workbooks(OutFile).Sheets(1).Cells(k, 1).Value = path Workbooks(OutFile).Sheets(1).Cells(k, i).Value = Workbooks(SrcFile).Sheets(1).Cells(m, j).Value k = k + 1 m = m + 1 Wend End If i = i + 1 Wend Workbooks(file).Close (False) file = Dir Wend End Sub 

编辑:

一些解释:

这里的模板文件和输出文件是一样的。 所以首先你必须在表单(1)上有一个xlsm结构:

文件名,标题1,Heading2,Heading3,Heading4,Heading5,Heading6,Heading7

然后将给定的代码input到该文件中,并在输出文件为活动工作表时运行。

试试下面。

 Sub Order_Columns() Dim template_headers As Variant, header As Variant, current_header As Variant, cl As Range, col As Integer template_headers = Array("Heading1", "Heading2", "Heading3", "Heading4", "Heading5") For header = LBound(template_headers) To UBound(template_headers) current_header = template_headers(header) col = col + 1 Set cl = ActiveSheet.Rows(1).Find(What:=current_header, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) If Not cl Is Nothing Then If Not cl.Column = col Then Columns(cl.Column).Cut Columns(col).Insert Shift:=xlToRight End If End If Next header End Sub 
  • 在数组中指定所需的标题顺序
  • 请注意,标头区分大小写,所以也许使用LCase()

我将离开你,添加代码来循环你的100多个文件夹来做到这一点,然后将这些数据放在主表中!