2013-11-26 254 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