宏来对Excel表中的列进行排序

时间:2014-10-10 18:48:57

标签: excel excel-vba ms-access vba

我想重新排序来自多个表格中的所有列(在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

这是代码的开始,但我真的不知道如何为每个表定义数组。

1 个答案:

答案 0 :(得分:0)

考虑 Table2 Sheet1 Sheet2 中是同一工作簿中的空白工作表,下面是将对列进行排序的代码从左到右:(在调用 pSortLeftToRight 子例程时必须传递表名)

Sub MainCode()

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

End Sub

Sub pSortLeftToRight(strTableName As String)

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

End Sub