宏从多列中排序数据直到下一个空行,然后重复

时间:2017-01-23 00:22:02

标签: excel vba excel-vba loops columnsorting

我有一张工作表'Sheet1'上有多个表的工作表,用空行隔开。

我希望VBA逐个排序。

考虑

  • 每个表都有不同的行数
  • 将来,列数量也会改变

总是一样的是:

  • B列表格之间的空白行,这是excel识别新表格的起点。
  • 每个表将始终按列C
  • 排序

为了给您提供更好的图片,我正在查看消费者数据交叉标签,其中:

  

COLUMN A是QUESTION TYPE

     

栏目B是答案选择

     

COLUMN C是Header是“TOTAL”,它包含每个答案选项的百分比

COLUMS的其余部分遵循%C,但有不同的标题,如“男性”,“女性”,“用户”,“非用户”,“年龄18-25岁”,“年龄26-34岁”......等。

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

我已经尝试过查看循环,排序和查找下一个空单元格。但出于某种原因,我不能把这些碎片放在一起。

任何帮助都将非常感激!

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

对于ref:这个是最接近的示例和宏我已经找到了我想要的东西,但它不适用于我的场景/无法使其工作:

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

1 个答案:

答案 0 :(得分:0)

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

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