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 回答