2014-06-23 43 views
0

我有一個包含10個工作表的excel文件。這些圖紙都包含相同的列標題但數據不同。我手動對第一張紙進行了排序,現在我希望其他紙張中的所有列都與第一張紙的順序相匹配,我無法手動完成所有這些操作,因爲這需要我永遠。如何根據第一張訂單以同一順序在工作簿中創建所有列?我對VBA知之甚少,所以尋求一些幫助。在工作表中對excel列進行排序

+0

通過 「整理...手動」 你的意思是如'排序的列A desc,然後列B asc,然後列C desc ...'?如果是這樣,除非您記錄每個過濾器的宏設置,否則除非自動執行它(例如vba),否則可能沒有更快的方法。 – Astockwell

+0

我的意思是我剪切並粘貼到我想要的順序的列。 – kittels

+0

第一行的列標題,對嗎?他們有多少(列)? – Horaciux

回答

1

確保在運行宏之前保存整個工作簿。沒有撤消。

希望這有助於:

Sub ColumnRearrangement() 
    'Horaciux 2014-06-23 
Dim nextLabel As String 
Dim currentLabel As String 

Dim TotalPages As Integer 
Dim TotalColumns As Integer 

TotalPages = 10 
TotalColumns = 200 

'Insert a blank column in each page 
For p = 2 To TotalPages 
    Sheets(p).Select 
    Columns("A:A").Select 
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
    Range("B1").Select 
Next 

For c = TotalColumns To 1 Step -1 
    Sheets(1).Select 

    'Debug.Print "-" & Cells(1, c).Text & "-" & Str(c) 
    nextLabel = Cells(1, c).Text 
    Sheets(2).Select 
    For oldCulumn = 2 To TotalColumns + 1 

     'Debug.Print Cells(1, oldCulumn).Text & "-" & Str(oldCulumn) 
     currentLabel = Cells(1, oldCulumn).Text 

     If currentLabel = nextLabel Then 
      'Debug.Print currentLabel & "-" & Str(oldCulumn) 
      Exit For 
     End If 
    Next 

    For p = 2 To TotalPages 
     Sheets(p).Select 
     Columns(oldCulumn).Select 
     Selection.Cut 
     Columns("A:A").Select 
     Selection.Insert Shift:=xlToRight 
    Next 
Next 

For p = 2 To TotalPages 
    Sheets(p).Select 
    Range("A1").Select 
Next 

End Sub 
0

如果您希望重複列的重新排序,只要所有表中的列都處於相同(錯誤)的順序,就應該能夠爲此記錄一個簡單的宏。打開第二個表(因爲你已經安排好第一),然後執行以下操作:

  1. 打開第二片
  2. 點擊record macro,給它的任何名稱
  3. 雖然它的錄音,剪切/插入列在爲了你想要第二片
  4. 一旦完成內,單擊stop recording

現在你有,你可以打開網頁的休息,就會重複宏您重新排序。打開每個工作表並單擊查看宏,然後運行剛剛創建的工作表。如果保存文件,它也會保存宏。

編輯:優點@horaciux,請確保在運行宏之前保存整個工作簿,因爲沒有撤消。

+1

確保在運行宏之前保存整個工作簿。沒有撤消。 – Horaciux

+0

我應該先錄製,因爲我有200列。所以尋找更快的東西。 – kittels