我有一张工作表'Sheet1'上有多个表的工作表,用空行隔开。
我希望VBA逐个排序。
考虑
总是一样的是:
为了给您提供更好的图片,我正在查看消费者数据交叉标签,其中:
COLUMN A是QUESTION TYPE
栏目B是答案选择
COLUMN C是Header是“TOTAL”,它包含每个答案选项的百分比
COLUMS的其余部分遵循%C,但有不同的标题,如“男性”,“女性”,“用户”,“非用户”,“年龄18-25岁”,“年龄26-34岁”......等。
我想创建一个循环宏,它将按列C按升序对每个表(以及表中的所有列)进行排序,以确定它必须搜索下一个空格,并且表将位于其下方。
我已经尝试过查看循环,排序和查找下一个空单元格。但出于某种原因,我不能把这些碎片放在一起。
任何帮助都将非常感激!
以前的代码尝试过:
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:这个是最接近的示例和宏我已经找到了我想要的东西,但它不适用于我的场景/无法使其工作:
答案 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