Очень похож на этот вопрос -> Группировать строки по значению
Единственное отличие состоит в том, что значения, которые я группирую, являются формулами.См. Ниже пример данных (кажется, не может правильно встраивать изображения)
Пример данных
Желаемый вывод
Код ниже изменен ниже по сравнению с ответом, связанным с выше.
Sub demo()
Dim r As Range
Dim v As Variant
Dim i As Long, j As Long
With ActiveSheet
On Error Resume Next
' expand all groups on sheet
.Outline.ShowLevels RowLevels:=8
' remove any existing groups
.Rows.Ungroup
On Error GoTo 0
Set r = .Range("D6", .Cells(.Rows.Count, 2).End(xlUp))
End With
With r
'identify common groups in column D
j = 1
v = .Cells(j, 1).Formula
For i = 2 To .Rows.Count
If v <> .Cells(i, 1) Then
' Colum D changed, create group
v = .Cells(i, 1)
If i > j + 1 Then
.Cells(j + 1, 1).Resize(i - j - 1, 1).Rows.Group
End If
j = i
v = .Cells(j, 1).Value
End If
Next
' create last group
If i > j + 1 Then
.Cells(j + 1, 1).Resize(i - j - 1, 1).Rows.Group
End If
' collapse all groups
.Parent.Outline.ShowLevels RowLevels:=1
End With
End Sub