Неожиданные результаты пользовательской сортировки с использованием VBA - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь отсортировать таблицу в своей таблице, используя пользовательскую сортировку. Пройдя немного взад и вперед, я придумал этот макрос:

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 Ответ

1 голос
/ 29 марта 2019

Проблема с сортировкой моей таблицы была не в самом коде сортировки, а в формулах, используемых для заполнения таблицы.Я заблокировал ссылки на ячейки в формулах, что означает, что после сортировки строки в другом месте в таблице формулы в этой строке по-прежнему ссылаются на то, что теперь было показано на прежнем месте . * 1003.*

Другими словами, все, что требовалось для устранения проблемы, - это удаление одного $ из каждой ссылки на ячейку, чтобы они могли быть заменены на соответствующие ячейки после сортировки.

Т.е. изменение

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

до

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

- все, что нужно.

...