Скопируйте столбец A, вставьте для каждого другого столбца, затем отсортируйте

#excel #vba

#excel #vba

Вопрос:

Мне нужна помощь в создании кода VBA, который принимает данные, собирает столбец даты (столбец A), вставляет для каждого, затем для каждой пары столбцов сортирует его.

Данные начинаются следующим образом

 Date, A, B, C, ...
01/02/2019, 100, 110, 120, ...
02/02/2019, 101, 107, 124, ...
03/02/2019, 102, 107, 123, ...
04/02/2019, 101, 108, 123, ...
  

Сначала он должен вставить дату в соответствии

 Date, A, Date, B, Date, C, ...
01/02/2019, 100, 01/02/2019, 110, 01/02/2019, 120, ...
02/02/2019, 101, 02/02/2019, 107, 02/02/2019, 124, ...
03/02/2019, 102, 03/02/2019, 107, 03/02/2019, 123, ...
04/02/2019, 101, 04/02/2019, 108, 04/02/2019, 123, ...
  

Затем он должен принимать столбцы попарно и сортировать по второму столбцу, т.е

 Date,  A,  Date,  B,  Date,  C,  ...
01/02/2019, 100,  02/02/2019, 107,  01/02/2019, 120,  ...
02/02/2019, 101,  03/02/2019, 107,  03/02/2019, 123,  ...
04/02/2019, 101,  04/02/2019, 108,  04/02/2019, 123,  ...
03/02/2019, 102,  01/02/2019, 110,  02/02/2019, 124, ...
  

Пока что у меня есть код, который находит последний столбец в строке, который возвращает столбец laast в качестве ссылки на строку (например, «GM»)

 Function ColumnLetter() As String
    Dim sht As Worksheet
    Dim LastColumn As Long
    Dim LastColumnStr, ColumnPaste As String
    Dim p As Long

    Set sht = ThisWorkbook.Worksheets("srtData")

    LastColumn = sht.Range("A1").CurrentRegion.Columns.Count

    Dim n As Long
    Dim c As Byte
    Dim s As String

    n = LastColumn
    Do
        c = ((n - 1) Mod 26)
        s = Chr(c   65) amp; s
        n = (n - c)  26
    Loop While n > 0
    ColumnLetter = s
End Function
  

Однако я понятия не имею, как выполнить итерацию, а затем отсортировать по второму столбцу. В идеале я просто хочу иметь такую функцию
Function sortallData(dim wsTest as String) , где я могу просто вызвать функцию, введя имя листа.

Комментарии:

1. Разбейте его на задачи. Похоже, вам нужно вставить несколько столбцов, скопировать столбец A, а затем выполнить некоторую сортировку.

2. Итерация для каждого другого столбца легко достижима с помощью простого For...Next цикла, например For i = 1 to 15 Step 2

Ответ №1:

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