2011-03-24 60 views
1

请帮助我在连续父列表中计算连续子列表。
我有一个数据表中:
----- < - A(列) - > < - B(列) - > < - C(列) - >
1 ----- AA - ------------- aa ---------------- aa
2 ----- bb ---------- ----- bb ---------------- bb
3 ----- aa ------------------ ------------------ AA
4 ----- AA
5 ----- BB
6 ----- BB
7 - ---- aa
8 ----- aa
9 ----- AA
10 ---- BB
11 ---- AA
12 ---- BBExcel宏 - 连续父列表中的连续子列表计数

如果我在列表中的计数列表B,返回的结果是4。
如果我列表A中的列表C,返回的结果是2.
感谢您的帮助。

+0

B/C类型列的深度上是否存在最大行数? – 2011-03-24 16:39:02

回答

1

这几乎是一个蛮力的解决方案,但会诀窍。

Option Explicit 

Public Function PatternCount(PatternRange As Excel.Range, TargetRange As Excel.Range) As Integer 
    Dim oCell As Excel.Range 
    Dim oEndCell As Excel.Range 
    Dim sTargetPattern As String 
    Dim sPattern As String 
    Dim iCount As Integer 

    sTargetPattern = RangeSignature(PatternRange) 

    For Each oCell In TargetRange 
     Set oEndCell = oCell.Offset(RowOffset:=PatternRange.Count - 1) 
     sPattern = RangeSignature(Range(oCell, oEndCell)) 

     If sPattern = sTargetPattern Then iCount = iCount + 1 
    Next oCell 

    PatternCount = iCount 

    Set oCell = Nothing 
    Set oEndCell = Nothing 
End Function 

Private Function RangeSignature(TargetRange As Excel.Range) As String 
    Dim oCell As Excel.Range 
    Dim sPattern As String 

    For Each oCell In TargetRange.Cells 
     sPattern = sPattern & oCell.Value & "|" 
    Next oCell 

    RangeSignature = sPattern 

    Set oCell = Nothing 
End Function 
+0

不错!请注意,这将计算重叠事件。因此,如果在'a | b | a | b | a | b | a | b | a | b | a | b'中查找'a | b | a | b','PatternCount'将返回5,而不是3你可能(或可能不会)期待。 – 2011-03-25 20:11:51