我正在尝试使用自定义排序方式对电子表格中的表格进行排序。来回反复后,我想到了这个宏:
Sub sort_SI()
With Resultat_SI.Sort
.SortFields.Clear
.SetRange Resultat_SI.Range(Resultat_SI.Range("A1"), Resultat_SI.Range("J" & Resultat_SI.Rows.Count).End(xlUp))
.SortFields.Add Key:=Resultat_SI.Columns("J"), CustomOrder:=Join(Application.Transpose(Fargar.ListObjects("Fargekoder").ListColumns(3).DataBodyRange), ",")
.Header = xlYes
.Apply
End With
End Sub
它运行得很好,并且在完成子操作后,我的条目的顺序确实发生了变化,但是排序似乎没有意义。至少我希望将J列中具有相同值的行组合在一起,但事实并非如此。
在即时窗口中打印Sort.SetRange
表示它是
$A$1:$J$20
按预期,而Join(Application.Transpose(Fargar.ListObjects("Fargekoder").ListColumns(3).DataBodyRange), ",")
给出
Green,Brown,Black,Black (600/610),Unmarked,Pink,Blue,White,White (378/428),Yellow,Ukjent,Red
也符合预期。
我在次级中引用的两张纸看起来像这样:
Resultat_SI
Fargekoder
基本上,我希望Resultat_SI中的表以与Fargekoder表中的颜色相同的顺序进行排序,而空白结果出现在底部,但我在实现此结果方面失败了。有人可以告诉我我要去哪里了吗?
答案 0 :(得分:1)
对表格进行排序的问题不在于排序代码本身,而是与用于填充表格的公式有关。我已将单元格引用锁定在公式中,这意味着一旦将一行排序到表中的其他位置,该行上的公式仍然引用现在显示到其先前位置的任何内容。< / p>
换句话说,解决此问题所需要做的就是从每个单元格引用中删除一个$
,以便在排序后将它们更改为适当的单元格。
即改变
=IFERROR(VLOOKUP($H$2;Fargekoder;3;FALSE);"")
到
=IFERROR(VLOOKUP($H2;Fargekoder;3;FALSE);"")
是全部花了。