我有一个电子表格,其中包含一些软件产品列表,一些产品达到模块级别,其他产品只是一个产品。我有一个分组,将每个供应商的产品或产品模块分组......
excel表旨在将供应商产品(或模块,如果存在)映射到某些功能。单元格中的“X”表示支持该功能。在图片模块中,A1.1支持功能1. ...而产品A2(没有定义的模块)也支持功能1。
当处理分组列的“树”时出现问题...我需要一个子/函数来完成映射的其余部分。即...如果我检查单元格D2和E2我想运行一个函数,将单元格C2更新为X,然后单元格B2更新为X.(X表示所有模块都支持该函数)
因此,在图形中,手动输入红色单元格,并自动添加非红色“X”和“O”单元格。
我知道这种格式看起来似乎很懒,但我会很感激帮助,甚至可以指导正确的想法,大脑是炒的,我甚至无法思考如何解决这个问题......
答案 0 :(得分: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