使用VBA自定义排序产生的意外结果

时间:2019-03-29 13:52:18

标签: excel vba excel-2016

我正在尝试使用自定义排序方式对电子表格中的表格进行排序。来回反复后,我想到了这个宏:

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

enter image description here

Fargekoder

enter image description here

基本上,我希望Resultat_SI中的表以与Fargekoder表中的颜色相同的顺序进行排序,而空白结果出现在底部,但我在实现此结果方面失败了。有人可以告诉我我要去哪里了吗?

1 个答案:

答案 0 :(得分:1)

对表格进行排序的问题不在于排序代码本身,而是与用于填充表格的公式有关。我已将单元格引用锁定在公式中,这意味着一旦将一行排序到表中的其他位置,该行上的公式仍然引用现在显示到其先前位置的任何内容。< / p>

换句话说,解决此问题所需要做的就是从每个单元格引用中删除一个$,以便在排序后将它们更改为适当的单元格。

即改变

  • =IFERROR(VLOOKUP($H$2;Fargekoder;3;FALSE);"")

  • =IFERROR(VLOOKUP($H2;Fargekoder;3;FALSE);"")

是全部花了。