按列值分组行

时间:2013-11-26 16:36:40

标签: loops excel-vba grouping vba excel

在宏中,我想对第四列中具有相同值的行进行分组。该列中有一定数量的值(因此我可能会为每个可能的值编写代码)但是假设无限值会更强。

我的第一个想法是创建一个循环,选择具有给定值的行,然后使用“Selection.Group”。我会“循环直到”第1列“IsEmpty”。

不太确定如何实现这一点。以下是我所得到的,这给了我一个错误消息; object_“工作表”的方法'范围'失败“

Sub Test()
     Dim Item As Range
     Item = Range(A2, A10)
     If Item.Cells = "a" Then Cell.Select
     Selection.Group
End Sub 

1 个答案:

答案 0 :(得分:0)

这只是“排序”部分的录制宏,片材声明为DIM:

Dim MySheet As Worksheet: Set MySheet = Sheets("Sheet1")
MySheet.Sort.SortFields.Clear
MySheet.Sort.SortFields.Add _
    Key:=Range("A1"), _
    SortOn:=xlSortOnValues, _
    Order:=xlDescending, _
    DataOption:=xlSortNormal
With MySheet.Sort
    .SetRange Range("A1:A10")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub

现在,关于分组单元格。您可以根据它的值声明每个“组”的范围,就像在命名范围(Ctrl+F3)中一样:

For i = 1 To MySheet.Rows.Count
    Range_Start = "A" & i 'Store the begining of the range
    If Range("A" & i) <> Range("A" & i - 1) Then
    Range_End = "A" & i 'Store the begining of the range
    MyRange = MySheet.Range(Range_Start & ":" & Range_End)
    ActiveWorkbook.Names.Add Name:="range" & ActiveWorkbook.Names.Count + 1, RefersTo:=MyRange
Next i

Although, I think the storing of the Range_Start may need some fine-tunning

反正。最好的方法是使用Record功能。然后,通过声明变量DIM(s)来调整代码,并且只在编写循环之后。根据你的问题,我不清楚你的意思是分组和你需要它。干杯!