![Сортировка строк: 6 транзакций с информацией о дате и действии, сгруппированных вместе](https://rvso.com/image/1597820/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%3A%206%20%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B9%20%D1%81%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B5%D0%B9%20%D0%BE%20%D0%B4%D0%B0%D1%82%D0%B5%20%D0%B8%20%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B8%2C%20%D1%81%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B5.png)
Мне нужно организовать информацию о транзакциях в электронной таблице по возрастанию даты. Каждая строка представляет одного человека и последние 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 для каждой дополнительной транзакции.