我有一个excel表(实际表格,即Insert> Table),它在所有公式中使用结构化引用。示例:=[@[Predicted Total 2015 Days]]-COUNTA(All.Departments[@[1]:[40]])
我遇到的问题是我想从左到右排序几个列。 Excel不允许你使用表格,只有范围(至少从我在主题上找到的内容)这样做似乎我唯一的选择是取消列表(将其转换为范围)然后将其转换回来。但是,在将其转换回表后,我的公式会丢失其结构化引用示例:=Sheet2!$V2-COUNTA(Sheet2!$X2:$BK2)
有没有办法将这些公式转换回结构化?或者更好的是,一种从左到右排序的方法,而不必来回转换我的桌子?
答案 0 :(得分:1)
我能够使用Excel 2010中的结构化引用对列进行排序,没有任何问题。使用对其他列和数据的结构化引用对表中的公式进行了排序。没有来回转换公式。
Option Explicit
Sub SortTable()
Dim ws As Worksheet
Dim tbl As ListObject
Set ws = ActiveSheet
Set tbl = ws.ListObjects("MyTable")
With tbl.Sort
.SortFields.Clear
.SortFields.Add Key:=ws.Range(tbl.Name & "[PredictedTotal]"), _
SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
.SortFields.Add Key:=ws.Range(tbl.Name & "[AllDepartments]"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
答案 1 :(得分:0)
我找到了将表格转换为范围的方法。如果有人好奇我决定发布我的解决方案。
现在设置为复制整个表格,将其作为转置值粘贴到目标工作表中,然后在其中循环对每个列的日期从最旧到最新排序,然后需要那些已排序的日期并将它们作为转置值粘贴回原始表格。
要弄清楚我自己的解决方案! = d
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
Dim SourceWS As Worksheet
Dim DestWS As Worksheet
Dim TblRange As Range
Dim DataRange As Range
Dim LastRow As Long
Set SourceWS = Worksheets("For HR Use ONLY")
Set DestWS = Worksheets("Transposed Table")
DestWS.Visible = xlSheetVisible
DestWS.Cells.ClearContents
SourceWS.Activate
LastRow = SourceWS.Range("A1").CurrentRegion.Rows.Count
Set TblRange = SourceWS.Range("A1:BM" & LastRow)
TblRange.Copy
DestWS.Range("A1").PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, True, True
Application.CutCopyMode = False
Set DataRange = SourceWS.Range("O2:BB" & LastRow)
DataRange.ClearContents
DestWS.Activate
Dim x As Long, LastCol As Long
LastCol = SourceWS.Range("A1").CurrentRegion.Rows.Count
For x = 2 To LastCol
Range(Cells(15, x), Cells(54, x)).Sort Key1:=Cells(15, x), Order1:=xlAscending, Header:=xlGuess
Next x
DestWS.Range(Cells(15, 2), Cells(54, LastCol)).Copy
SourceWS.Range("O2").PasteSpecial xlPasteValues, lPasteSpecialOperationNone, True, True
Application.CutCopyMode = False
DestWS.Visible = xlSheetHidden
SourceWS.Activate
SourceWS.Range("A1").Select
Set SourceWS = Nothing
Set DestWS = Nothing
Set TblRange = Nothing
Set DataRange = Nothing
Application.ScreenUpdating = True
End Sub
答案 2 :(得分:0)
我遇到了同样的问题。使用以下配方:
你已经完成了。警告:如果你有任何数组公式,你将不得不用CTRL + SHIFT + ENTER重新发送它们