2017-02-20 68 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

在本網站上有很多關於在文件中循環工作簿的示例。我會從那裏開始。 –