Как отсортировать столбец таблицы по значению другого столбца? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть таблица из столбца A: C, в столбце H у меня есть такое же значение в столбце B в другом порядке, как сортировать таблицу по столбцу H?

Public Sub ReportSorting()
    Dim sht As Worksheet
    Dim LastRow As Long
    Dim sRange As Range
    Dim kRange  As Variant
    Dim nSort As Long

    Set sht = ActiveSheet
    LastRow = sht.Cells(sht.Rows.Count, "H").End(xlUp).Row

    Set sRange = sht.Range("H2:H" & LastRow)

    'Read values into array from range ActiveSheet
    kRange = sRange.Value

    Application.AddCustomList ListArray:=kRange
    nSort = Application.CustomListCount

    sht.Sort.SortFields.Clear
    sht.Sort.SortFields.Add Key:=Range("B1:B" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:=nSort, DataOption:=xlSortNormal
    With sht.Sort
        .SetRange Range("A1:C" & LastRow)
        .Header = xlYes
        .MatchCase = True
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Я получаю

Ошибка 1004: Mothod Добавить AddCustomList для объекта Приложение имеет сбой!

A: Имя таблицы C: Req и H внеТаблица.

A      B    C    ...   H
PID   ID   Name        SID
-     001  AAA         001
001   002  BBB         002
004   003  CCC         004
      004  DDD         003  
....     

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

метод Application.AddCustomList может содержать только строку, и если вы попытаетесь добавить числа (Range), как в примере выше, вы получите ошибку!

Я попробовал простые трюки и добавил вспомогательный столбец (из ID) и добавил также строку «abc» в значения обоих столбцов (D и H), как показано ниже:

 A     B    C      D    ...   H
PID   ID   Name   HID        SID
      001  AAA   abc001     abc001
001   002  BBB   abc002     abc002
004   003  CCC   abc003     abc004
      004  DDD   abc004     abc003  

и столбец сортировки D:

sht.Sort.SortFields.Clear
sht.Sort.SortFields.Add Key:=Range("D1:D" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:=nSort, DataOption:=xlSortNormal
With sht.Sort
    .SetRange Range("A1:D" & LastRow)
    .Header = xlYes
    .MatchCase = True
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

сейчас работает;)

0 голосов
/ 24 мая 2019

Согласно документации, метод Application.AddCustomList ошибка довольно очевидна:

Если список, который вы пытаетесь добавить, уже существует, этот метод выдает ошибку времени выполнения 1004.

Итак, вы пытаетесь добавить список, который уже существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...