Сортировать пустые ячейки снизу в порядке убывания с помощью VBA - PullRequest
1 голос
/ 07 января 2020

Я сортирую следующие столбцы независимо и в порядке убывания, то есть наибольшее значение в каждом столбце всегда будет в верхней строке. Тем не менее, у меня есть несколько пустых ячеек в таблице.

На самом деле они не пустые, а формула индекса / соответствия ссылается на другую ячейку формулы IFERROR(H2/I2,""), которая дает пустой ответ. sh Чтобы отсортировать пустые ячейки внизу каждого столбца при выполнении сортировки по убыванию.

Как я могу изменить следующий код VBA, чтобы разрешить это? Я бы предпочел, чтобы решение было более общим c, а также позаботился о ситуации, когда я сортирую положительные и отрицательные числа в заполненных ячейках в порядке убывания.

Sub SortIndividualCol()
    Dim xRg As Range
    Dim yRg As Range
    Dim ws As Worksheet
    Set ws = ActiveSheet
    On Error Resume Next
    Set xRg = Application.InputBox(Prompt:="Range Selection:", _
                                    Title:="Input header range", Type:=8)
    Application.ScreenUpdating = False
    For Each yRg In xRg
        With ws.Sort
            .SortFields.Clear
            .SortFields.Add Key:=yRg, Order:=xlDescending
            .SetRange ws.Range(yRg, yRg.End(xlDown))
            .Header = xlYes
            .MatchCase = False
            .Apply
        End With
    Next yRg
    Application.ScreenUpdating = True

Перед сортировкой:

Data before sorting

После сортировки по убыванию, но пустые ячейки отсортированы сверху:

Data after descending sort, but blank cells are sorted to the top:

1 Ответ

0 голосов
/ 07 января 2020

Это базовая c l oop, которая будет l oop и сортировать каждый столбец независимо. Отказ от ответственности Целостность данных строки не будет поддерживаться.

For x = 1 To 5 'adjust to the number of columns you want to sort
    With ActiveSheet.Sort 'I prefer to use the actual sheet name
        .SortFields.Clear
        .SortFields.Add .Parent.Columns(x), Order:=xlDescending
        .SetRange .SetRange .Parent.Cells(1, x).Resize(6) 'you can use a last row variable -1
        .Apply
    End With
Next x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...