2013-11-26 255 views
0

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

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

不太确定如何实现这一点。以下是我得到的,这给了我一个错误messaage; 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 

现在,关于分组该cells.You可以在此基础上每一个“组”申报范围的价值,就像在一个名为范围(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功能。然后,通过声明变量​​(s),并且只有在编写循环之后调整代码。根据你的问题,我不清楚你是什么意思的分组和你需要它。干杯!

+0

如果您选择几行并使用简单命令“Selection.Group”运行宏,您将会看到我的意思。一旦行是组,你可以轻松地隐藏和取消隐藏他们只需点击lhs。这个任务中棘手的部分是定义要分组的范围,我正在通过在循环中使用具有偏移选择的“if”语句来工作。还没有完全获得它,但是当我这样做时我会发布我的代码。 – user3033634