Как отсортировать таблицу элементов на основе общей метки? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть таблица элементов с заголовками (время и длина), и это можно увидеть на рисунке 1 ниже (пожалуйста, игнорируйте выделенные части и рассматривайте их как ячейки «без заполнения»). Fig 1

Я хочу создать макрос для объединения всех столбцов «Время» в один столбец и упорядочения значений «Длина» на основе соответствующих значений времени, показанных на рис. 1 выше. Чтобы проиллюстрировать, как это работает, вы можете взглянуть на рис. 2 ниже, чтобы увидеть окончательное расположение таблицы после запуска макроса для сортировки таблицы.

Figure 2

У меня есть небольшое представление о том, как создать макрос. Во-первых, используя столбец времени в качестве ключа, я прикреплю ВСЕ значения длины, соответствующие к ключу (например, 3.29E-04 в столбце E, присоедините «Ключ» 0 в столбце D), а затем объедините значения времени и, наконец, отсортируйте значения длины на основе ключей, к которым они были прикреплены, чтобы получить окончательный таблица, как показано на рисунке 2. Однако я не знаю, как прикрепить значения длины к соответствующему ключу. Следовательно, кто-то может научить меня, как это сделать?

Если нет, есть ли другие способы для более эффективной сортировки таблицы? Пожалуйста, посоветуйте мне, как это сделать, спасибо.

1 Ответ

0 голосов
/ 11 марта 2020

Если вы действительно хотите использовать VBA для этого, исходя из предположения, что ваши данные настроены так, как у вас в запросе: добавьте приведенный ниже код в модуль и запустите его

Option Explicit

Sub SetNewTable()

    Dim oWS As Worksheet: Set oWS = ThisWorkbook.Worksheets("Sheet3")       ' Change the sheet name
    Dim iLR As Long: iLR = oWS.Range("N" & oWS.Rows.Count).End(xlUp).Row

    With oWS

        .Range("O3:O" & iLR).Formula = "=IFNA(VLOOKUP($N3,$D$3:$E$" & iLR & ",2,FALSE),0)"
        .Range("P3:P" & iLR).Formula = "=IFNA(VLOOKUP($N3,$F$3:$G$" & iLR & ",2,FALSE),0)"
        .Range("Q3:Q" & iLR).Formula = "=IFNA(VLOOKUP($N3,$H$3:$I$" & iLR & ",2,FALSE),0)"
        .Range("R3:R" & iLR).Formula = "=IFNA(VLOOKUP($N3,$J$3:$K$" & iLR & ",2,FALSE),0)"

    End With

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