Как отсортировать строки в столбце A в ListObject VBA с параметром в столбце B

У меня есть таблица в Excel, которая заполняется через макрос Listobject из базы данных.

Я могу отсортировать таблицу по следующему коду:

'Sort on projecttabel
Dim lo As Excel.ListObject

Set lo = Plan.ListObjects(1)
With lo
.Sort.SortFields.Clear
    .Sort.SortFields.Add _
        Key:=Range("Table_appnlvd03_nkmgo_report_NKMGO_Report__KHNS_EFTTS_KPI32[klant]"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    .Sort.SortFields.Add _
        Key:=Range("Table_appnlvd03_nkmgo_report_NKMGO_Report__KHNS_EFTTS_KPI32[Status]"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    .Sort.SortFields.Add _
        Key:=Range("Table_appnlvd03_nkmgo_report_NKMGO_Report__KHNS_EFTTS_KPI32[RFO plandatum]"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
    .Sort.SortFields.Add _
        Key:=Range("Table_appnlvd03_nkmgo_report_NKMGO_Report__KHNS_EFTTS_KPI32[Uitvoeren montage plan start]"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal

    With .Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With

"Состояние" имеет несколько целочисленных значений в диапазоне от 1 до 100. Я хотел бы отсортировать строки на основе их статуса И другого столбца. Проблема, с которой я сталкиваюсь, заключается в том, что "второй столбец" для сортировки отличается для каждого статуса.

Я хотел бы создать таблицу типа Gant, в которой отсортированы различные столбцы даты. По убыванию для каждого статуса. Например (ДД-ММ-ГГГГ)

[Status]   [date1]              [date2]         [date3]
1         **10-01-2015**       12-02-2015        31-03-2015      
1         **09-01-2015**       14-02-2015        10-03-2015          
1         **08-01-2015**       06-02-2015        05-03-2015  
1         **07-01-2015**       18-02-2015        28-03-2015  
2         17-01-2015       **15-02-2015**        10-03-2015  
2         27-01-2015       **14-02-2015**        10-03-2015  
2         04-01-2015       **13-02-2015**        16-03-2015  
2         31-01-2015       **05-02-2015**        10-03-2015  
5         18-01-2015       12-02-2015        **30-03-2015**  
5         31-01-2015       18-02-2015        **27-03-2015**  
5         17-01-2015       04-02-2015        **26-03-2015**  
5         07-01-2015       27-02-2015        **08-03-2015**  
5         09-01-2015       24-02-2015        **03-03-2015**  

и т.д. Возможно ли это?

1 ответ

Нужно добавить рабочее поле в таблицу, назовите его "Sort.Key", затем введите эту формулу в это поле:

=CONCATENATE([@Status],CHAR(133),CHOOSE([@Status],[@date1],[@date2],,,[@date3]))

Теперь отсортируйте таблицу, используя поле "Sort.Key"

Другие вопросы по тегам