2014-10-10 65 views
1

我想重新排列同一個工作表中一個在另一個下面的幾個表格(在Excel中設置爲表格)的所有列。用於在Excel表格中排序列的宏

這是一個例子,所以你可以有一個更好地瞭解我目前有:

表1

Col1 Col2 Col3 Col4 Col5 
Data Data Data Data Data 

表2

Col1 Col4 Col5 Col3 Col2 
Data Data Data Data Data 

表3(在這個表中,我有一個額外的列,我不需要)

Col3 Col1 Col2 Col5 Col4 Col6 
Data Data Data Data Data Data 

所需的結果

Col1 Col2 Col3 Col4 Col5 
Data Data Data Data Data 
Data Data Data Data Data 
Data Data Data Data Data 

我的第一溶液在Excel中創建宏,但我疊的代碼,因爲我不是專家。這個想法是創建一個數組併爲每個表排序。

Dim tbl As ListObject 
Dim WS As Worksheet 
Dim arrColOrder As Variant, ndx As Integer 

arrColOrder = Array("Col1", "Col2", "Col3", "Col4", "Col5") 

For ndx = LBound(arrColOrder) To UBound(arrColOrder) 
    For Each WS In Worksheets 
    For Each tbl In WS.ListObjects 

這是代碼的起源,但我真的不知道如何爲每個表定義數組。

回答

0

考慮表2是在Sheet 1中Sheet 2中爲空白片在相同的工作簿時,下面是將排序列從左到右的代碼:(表名具有在調用要傳遞pSortLeftToRight子程序)

子MainCode()

'Call Sort Left to Right routine 
Call pSortLeftToRight("Table2") 'Need to pass Table Name here 

結束子

子pSortLeftToRight(strTableName作爲字符串)

Dim tblSource   As ListObject 
Dim varTempData   As Variant 
Dim rngDataRange  As Range 

'Assign Table data to variant 
varTempData = Sheet1.ListObjects(strTableName).Range 


With Sheet2.Range("A1").CurrentRegion 
    .Clear 
    .Resize(UBound(varTempData, 2), UBound(varTempData, 1)) = Application.Transpose(varTempData) 
    Set rngDataRange = Sheet2.Range("A1").CurrentRegion 
    rngDataRange.Sort key1:=rngDataRange.Columns(1), order1:=xlAscending, Header:=xlNo 
End With 

varTempData = Empty 
varTempData = Application.Transpose(rngDataRange) 
Set rngDataRange = Sheet1.ListObjects(strTableName).Range 
Sheet1.ListObjects("Table2").Range = varTempData 
Sheet1.ListObjects.Add(xlSrcRange, rngDataRange, , xlYes).Name = strTableName 

Set rngDataRange = Nothing 

結束子