VBA基于格式对行进行分组

时间:2017-08-10 16:39:58

标签: excel vba excel-vba

我正在尝试通过VBA根据Excel中的格式对行进行分组,并且在谷歌搜索时,发现了一个2005年的论坛帖子,其中提出了类似的问题。
用户发布的代码非常适合选择行,但我无法获得实际分组行的代码。

Original Forum post

代码:

Sub GetSameFormattedRange()  
    Dim c As Range, r As Range, e As Range 

    Set e = Intersect(ActiveSheet.UsedRange, Columns(1)) 

    SetFormatData 

    Set c = e.Find(What:="", SearchFormat:=True) 

    If Not c Is Nothing Then 
        Set r = c 
        firstAddress = c.Address 
        Do 
            Set r = Union(r, c) 
            Set c = e.FindNext(After:=c) 

            If Not c Is Nothing Then 
                If c.Address = firstAddress Then Exit Do 
            End If 
        Loop While Not c Is Nothing 
    End If 

    If Not r Is Nothing Then 
        MsgBox r.Address 
    End If 

    Application.FindFormat.Clear 
End Sub 

Sub SetFormatData() 
    Application.FindFormat.Clear 
    Application.FindFormat.Interior.Color = vbRed 

    Application.FindFormat.Locked = True 
    Application.FindFormat.FormulaHidden = False 
End Sub 

在我的情况下,Application.FindFormat.Interior.Color = vbRed将为Application.FindFormat.IndentLevel = 1

谢谢!

1 个答案:

答案 0 :(得分:0)

这可能不适合你,但我实际上今天早些时候做了类似的事情,我根据.Interior.Pattern对项目进行了分组,这也适用于.Interior.Color:

Dim i as Integer
For i = 2 to 10
    If Cells(i,1).Interior.Pattern=xlSolid Then
        Rows(i).EntireRow.Group
        Else
        End If
    Next i

需要注意的是,每一行都会被分组,如果后续行也分组,那么它们就会配对,从而增加了分组行的总长度。如果有休息,它会开始一个新的分组。