2017-02-20 73 views
0

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

我已经尝试在此链接Rearranging Columns in Multiple Excel Files using VBA解决方案,它没有工作。

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

文件1

标题1,Heading2,Heading3

文件2

Heading2,标题1,Heading5,Heading7

模板文件

标题1,Heading2,Heading3,Heading4,Heading5,标题6,标题7

预期输出文件

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

回答

1

假设在每一个文件你的工作表(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

然后输入给定的代码到这个文件,当输出文件是活动工作表时运行它。

+0

,谢谢。我试过它没有工作。在我所有的文件数据都在sheet1中。 – davidb

+0

你是否在'mDirs =“c:\”'你的路径在这里用\在最后'输入了你的xlsx文件的文件夹名? 例如:“c:\ data \ xlsFiles \” – tretom

+0

是我按照您的示例输入了路径“c:\ data \ xlsFiles \” – davidb

2

尝试以下。

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多个文件夹来完成这个工作,然后将这些数据放在主表单中!

+0

非常感谢你,它如预期般运作良好。你能帮我用代码来遍历所有文件。所有的100个文件都位于一个文件夹中。 – davidb

+0

在本网站上有很多关于在文件中循环工作簿的示例。我会从那里开始。 –