Макрос Excel - подсчет последовательного дочернего списка в последовательном родительском списке - PullRequest
1 голос
/ 24 марта 2011

, пожалуйста, помогите мне подсчитать последовательный список детей в последовательном списке родителей.
У меня есть таблица данных:
----- <- A (столбец) -> <- B (столбец) -> <- C (столбец) ->
1 ----- аа --------------- аа ---------------- аа
2 ----- bb --------------- bb ---------------- bb
3 ----- аа ------------------------------------ аа
4 ----- аа
5 ----- бб
6 ----- бб
7 ----- аа
8 ----- аа
9 ----- аа
10 ---- bb
11 ---- аа
12 ---- bb

если я посчитаю список B в списке A, возвращаемый результат равен 4.
если я посчитаю список C в списке A, возвращается результат 2.
Спасибо за помощь.

1 Ответ

1 голос
/ 24 марта 2011

Это довольно грубое решение, но оно поможет.

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
...