0

ソフトウェア製品などのリストを含むスプレッドシートがあります。一部の製品はモジュールレベルになり、その他の製品は単なる製品です。各ベンダーの製品または製品モジュールをグループ化するグループがあります...

Excelシートは、ベンダー製品(または存在する場合はモジュール)を特定の機能にマッピングすることを目的としています。セル内の「X」は、その機能がサポートされていることを示します。画像モジュールでは、A1.1は機能1をサポートしています。...および製品A2(モジュールが定義されていない)も機能1をサポートしています。

グループ化された列の「ツリー」を処理するときに問題が発生します...残りのマッピングを完了するサブ/関数が必要です。つまり...セルD2とE2の両方をチェックする場合、セルC2をXに更新し、次にセルB2をXに更新する関数を実行したいと思います(Xは、すべてのモジュールが関数をサポートしていることを示します)

したがって、図では、赤いセルが手動で入力され、赤い以外の「X」セルと「O」セルが自動的に追加されます。

私はこれがこの形式で怠惰な質問に見えることを知っています、しかし私は正しい考えに導かれるためにさえ助けてくれれば幸いです、脳は揚げられてそして私はこれを解決する方法を考えることさえできません...

ここに画像の説明を入力してください

4

1 に答える 1

3

列にあるOutlineLevelプロパティを使用して、ワークシートのアウトラインロジックに基づいて親と子を見つけることができます。

試す:

'This function goes thru the outline childrens of a cell and can apply some logic based on their value
Function SubComponentsPresent() As String
    Application.Volatile

    Dim RefRange As Range
    Set RefRange = Application.Caller

    Dim Childrens As Range
    Set Childrens = OutLineChildren(RefRange)

    Dim oCell As Range
    For Each oCell In Childrens
        '-----------
        'Insert code here
        '-----------
    Next oCell

    SubComponentsPresent = tOut
End Function

'This functions returns the childrens of a cell (Considering a column outLine)
Function OutLineChildren(RefCell As Range) As Range
    Dim oCell As Range
    Dim tOut As String

    With RefCell.WorkSheet
        If .Outline.SummaryColumn = xlSummaryOnRight Then
            Set oCell = RefCell.Offset(0, -1)
            Do Until oCell.EntireColumn.OutlineLevel <= RefCell.EntireColumn.OutlineLevel
                If oCell.EntireColumn.OutlineLevel = RefCell.EntireColumn.OutlineLevel + 1 Then
                    If tOut <> "" Then tOut = tOut & ","
                    tOut = tOut & oCell.Address
                End If
                Set oCell = oCell.Offset(0, -1)
            Loop
        Else
            Set oCell = RefCell.Offset(0, 1)
            Do Until oCell.EntireColumn.OutlineLevel <= RefCell.EntireColumn.OutlineLevel
                If oCell.EntireColumn.OutlineLevel = RefCell.EntireColumn.OutlineLevel + 1 Then
                    If tOut <> "" Then tOut = tOut & ","
                    tOut = tOut & oCell.Address
                End If
                Set oCell = oCell.Offset(0, 1)
            Loop
        End If
    End With
    Set OutLineChildren = RefCell.Worksheet.Range(tOut)
End Function
于 2012-09-26T18:47:46.587 に答える