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