Excel 2013, можна автоматично сортувати дані?


6

Чи є спосіб автоматичного сортування? Я автоматично оновлюю клітини і залежно від вхідних значень змінюються рейтинги. Я шукаю спосіб автоматичного розміщення таблиці (подібно до умовного форматування) без натискання кнопки повторного сортування.

Мета полягає в тому, щоб зробити це чисто через вбудовану функцію Excel2013. Я не шукаю рішення, яке включає додаткові комірки, які допомагають сортувати, наприклад, Rank (), ...

Редагувати

Я включаю код макросу, який оновлює книгу в заданому інтервалі, а також включає код в одному аркуші, який повинен оновлювати таблиці на одному аркуші на Worksheet_Calculate. Я отримую помилку під час виконання, не знаючи, що не так?

Public RunWhen As Double
Const frequency = 5
Const cRunWhat = "DoIt"  ' the name of the procedure to run

Sub StartTimer()
    RunWhen = Now + TimeSerial(0, 0, frequency)
    Application.OnTime RunWhen, cRunWhat, Schedule:=True
End Sub

Sub DoIt()
    Sheets("RAWDATA").Calculate
    ActiveSheet.Calculate
    StartTimer  ' Reschedule the procedure
End Sub

Sub StopTimer()
    On Error Resume Next
    Application.OnTime RunWhen, cRunWhat, Schedule:=False
End Sub

і код, який нібито оновлює таблиці

Private Sub Worksheet_Calculate()

With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False
End With

ActiveSheet.ListObjects("Table2").AutoFilter.ApplyFilter
    With ActiveWorkbook.Worksheets("Strategies").ListObjects("Table2").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

ActiveSheet.ListObjects("Table3").AutoFilter.ApplyFilter
    With ActiveWorkbook.Worksheets("Strategies").ListObjects("Table3").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .DisplayAlerts = True
End With

End Sub

2
Ну, я думаю, що це посилання має показати спосіб зробити це: stackoverflow.com/questions/13020878/…
lowak

Отже, я вважаю, що не існує функції в Excel2013, яка б активувала автоматичне повторне сортування таблиць? Мені це дивує, оскільки умовне форматування автоматично налаштовується на будь-які зміни у вихідних даних. Отже, мені важко повірити, що функція сортування не існує, що повторно сортує зміну даних. Я розумію, що я можу просто записати макрос і повторно сортувати вручну і підключити код до методу події WorkshSeet_Change (), але його надзвичайно брудний, найменша зміна перейменування стовпців розбиває код, щоб просто назвати одну проблему.
Matt

2
Якщо ви використовуєте, можна уникнути "мерехтіння екрана" Application.Screenupdating True / False. Спочатку введіть False, щоб вимкнути відображення будь-яких оновлень, зроблених на робочому аркуші, а потім - True, щоб показати, що було зроблено.
lowak

1
Інша справа про Worksheets_change - створити добро if умова, так що макрос не буде реагувати кожен раз, коли ви перейдете в іншу комірку.
lowak

2
@Iowak, якщо ви хочете, будь ласка, напишіть відповідь, і я позначу її як бажану. Ще раз спасибі за вашу цінну допомогу.
Matt

Відповіді:


3

Мені не подобається залишати питання без відповіді, коли вони вже отримали відповідь, коментує він. Ви можете прочитати історію в коментарях, але ось остаточне рішення:

Private Sub Worksheet_Calculate()
    'If the active sheet is called "Strategies", then this reapplies the filter for two tables and re-sorts them

    Const wsName As String = "Strategies"

    If ActiveSheet.Name = wsName Then

        'Freeze everything and turn off events
        With Application
            .ScreenUpdating = False
            .EnableEvents = False
            .DisplayAlerts = False
        End With

        'Update Table2
        With Worksheets(wsName).ListObjects("Table2")
            .AutoFilter.ApplyFilter
            With .Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With

        'Update Table3
        With Worksheets(wsName).ListObjects("Table3")
            .AutoFilter.ApplyFilter
            With .Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With

        'Unfreeze things and turn events back on
        With Application
            .ScreenUpdating = True
            .EnableEvents = True
            .DisplayAlerts = True
        End With

    End If
End Sub

Ви, ймовірно, можете навіть скоротити фільтрацію та сортування лише

    With Worksheets(wsName).ListObjects("Table2")
        .AutoFilter.ApplyFilter
        .Sort.Apply
    End With

Це спільнота wiki, тому що я не отримав рішення. Ви можете редагувати його, якщо хочете, але все, що я зробив, це переписати проблему, знайдену в коментарях, і трохи очистити код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.