
Мне нужно организовать информацию о транзакциях в электронной таблице по возрастанию даты. Каждая строка представляет одного человека и последние 6 транзакций в его истории. Проблема в том, что хотя база данных выдает последние 6 транзакций, она делает это не по порядку, поэтому мне нужно сделать это вручную в Excel.
Дата транзакции и дата истечения срока должны быть привязаны к данным "Is Gift" и "Action", поэтому использование функций сортировки строк не работает для этого приложения. Эти четыре столбца должны храниться вместе как группа.
На приложенном снимке экрана я использовал цвета, чтобы показать, как столбцы должны оставаться сгруппированными вместе, и выделил красным транзакцию, которая ДОЛЖНА была быть первой, если бы данные были в правильном порядке. Надеюсь, это даст более четкое представление о проблеме («первые» находятся в разных столбцах для каждого человека) и какова моя цель (чтобы каждая группа столбцов была отсортирована в порядке возрастания даты по строке).
решение1
Попробуйте этот код. Вставьте его в окно редактора VB и запустите (погуглите «как запустить код vba» для получения дополнительной помощи). Это совсем не эффективно, но должно работать.
Sub Some_Sorting_Procedure()
Dim r As Long, last_row As Long
Dim i As Long, j As Long
Dim arr As Variant
Application.ScreenUpdating = False
With ActiveSheet
last_row = .Cells(.Rows.Count, 1).End(xlUp).Row
For r = 2 To last_row
For i = 3 To 23 Step 4
For j = i + 4 To 23 Step 4
If .Cells(r, i).Value > .Cells(r, j).Value Then
arr = .Cells(r, j).Resize(, 4).Value
.Cells(r, i).Resize(, 4).Cut .Cells(r, j)
.Cells(r, i).Resize(, 4).Value = arr
End If
Next j
Next i
Next r
End With
End Sub
Редактировать
Это предполагает, что ваши данные начинаются с ячейки A1
, и в первом столбце нет пустых ячеек. Жестко закодированное значение 23
связано с тем, что вы упомянули, что будет только шесть транзакций. Вам нужно будет увеличить это число на 4 для каждой дополнительной транзакции.