宏对多列数据进行排序,直到下一个空白行,然后重复

Macro to sort data from multiple columns until next blank row, then repeat

我有一个 sheet,在同一个作品上有多个 tablesheet 'Sheet1',由一个空行分隔。

我要VBA一个一个排序。

注意事项

永远不变的是:

为了给你一个更好的画面,我正在查看消费者数据交叉表,其中:

COLUMN A is QUESTION TYPE

COLUMN B is ANSWER CHOICES

COLUMN C is Header is "TOTAL", and it contains % per answer choices

COLUMS 的其余部分像 C 一样跟在 % 之后,但 headers 不同,例如“男性”“女性”“用户”“非用户”“18-25 岁”“26-34 岁”... .等

我想创建一个循环宏,它将按 C 列升序对每个 table(以及 table 中的所有列)进行排序,以确定它必须搜索下一个空白space 并且 table 将在其下方。

我试过查看循环、排序和查找下一个空单元格。但是由于某些原因我无法将它们拼凑起来。

任何帮助将不胜感激!

ORIGINAL FILE

AFTER MACRO DESIRED OUTPUT

之前尝试过的代码:


Dim oneArea as Range

For Each oneArea in Range("C:C").SpecialCells(xlCellTypeConstants).Area
    oneArea.EntireRow.Sort key1:=oneArea.Cells(1,1), order1:=xlAscending
Next oneArea

供参考:这是我发现的最接近我想要的示例和宏,但它不适用于我的场景/无法使其工作:

Macro to sort data until blank row(s), then repeat

以下代码遍历 sheet 中的每一行,检查每个 table 的开始和结束,并对它们进行排序。享受。

Sub Mak1()
Dim LastRow As Long, LastCol As Long
Dim TabBeg As Long, TabEnd As Long

    With Sheets("Sheet1")
        LastRow = .Cells(.Rows.Count, 2).End(xlUp).row
        LastCol = .Cells(3, .Columns.Count).End(xlToLeft).Column
        TabBeg = 4
        TabEnd = 4
        For i = 4 To LastRow + 1
            If .Cells(i, 2).Value = "" Then
                With .Sort
                    .SortFields.Clear
                    .SortFields.Add Key:=Range(Cells(TabBeg, 3), Cells(TabEnd, 3)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                    .SetRange Range(Cells(TabBeg, 2), Cells(TabEnd, LastCol))
                    .Header = xlNo
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply
                End With
                TabBeg = i + 1
                TabEnd = i
            Else
                TabEnd = TabEnd + 1
            End If
         Next i
    End With

End Sub