Excel: как можно отсортировать диапазон чисел с ведущими нулями, как это делает сводная таблица? - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно отсортировать диапазон чисел на листе, чтобы они соответствовали сортировке, выполненной вторым, очень похожим набором данных в сводной таблице.Числа представлены в строковом формате, так как некоторые из них начинаются с 0, 00 и т. Д.

Удаление начальных нулей не вариант, так как это будет дублировать записи (например, у меня 056 и 0056).

Строки имеют различную длину, и не только из-за начальных нулей.

Сводная таблица по умолчанию сортируется следующим образом (кажется, что числа сортируются только как строки):

First example of pivot table sort

Second example of pivot table sort

По сути, мне нужно, чтобы порядок был таким:

00056
00182
01097
100
106
10610
109
86930
870032
87035
...

Вещи, которые я пробовал:

  1. Сортировка на листе всего, что выглядит как число как число;
  2. Сортировка чисел и текста по отдельности;
  3. Сортировка по пользовательскому списку, где пользовательский список - это набор данных всводная таблица.

Кажется, что вы не можете заставить Excel сортировать диапазон чисел исключительно в виде строк, где, как кажется, сводная таблица не имеет проблем с этим.

Я бы предпочел, чтобы мне не приходилось поворачивать первый набор данных, который у меня естьмы просто рассортируем его как сводную таблицу!

Есть идеи?

Заранее спасибо,

PS Я действительно только ищу ответ на этот вопрос,не решения разных проблем или вопросов о том, почему я делаю это в первую очередь, спасибо!

1 Ответ

0 голосов
/ 17 декабря 2018

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

Option Explicit


Sub funnySort()

    With Worksheets("sheet2")
        .Columns("A").Insert
        .Range(.Cells(2, "A"), .Cells(.Rows.Count, "B").End(xlUp).Offset(0, -1)).Formula = _
            "=LEFT(B2&REPT(0, 9), 10)"
        With .Range(.Cells(1, "A"), .Cells(.Rows.Count, "B").End(xlUp))
            .Sort Key1:=.Cells(1), Order1:=xlAscending, _
                  Orientation:=xlTopToBottom, Header:=xlYes
        End With
        .Columns("A").Delete
    End With

End Sub

enter image description here

...