如何递归附加细胞?

时间:2012-04-12 12:51:30

标签: excel excel-formula

我有一张Excel表格,如下所示:

  |A     B           C                      D
-----------------------------------------------------------------------------------
1 |ID    PARENTID    VALUE                  RESOLVED VALUE (how to generate this?)
===================================================================================
2 |0     0           /root                  /root
3 |1     0           /one                   /root/one
4 |2     0           /two                   /root/two
5 |3     0           /three                 /root/three
6 |4     3           /child-one-of-three    /root/three/child-one-of-three
7 |5     3           /child-two-of-three    /root/three/child-two-of-three

每行都有IDPARENTID。我想通过强行附加每行的RESOLVED VALUE来生成最后一列VALUE的内容。

如何在Excel中执行此操作?

2 个答案:

答案 0 :(得分:3)

假设您的数据在单元格A3中开始:

=IF(B4=A4,C4,VLOOKUP(B4,$A$3:$D$5,4)&C4)

您必须将$A$3:$D$5扩展到数据数组的大小。

答案 1 :(得分:1)

这是一个VBA功能解决方案。

Option Explicit
Public Function ResValue(id As Long, table As Range, indexID As Integer, indexParentID As Integer, indexValue As Integer) As String

Dim strTmp As String, idTmp As Long
idTmp = id
ResValue = ""
Do While idTmp <> 0
    strTmp = Application.WorksheetFunction.Index(table.Columns(indexValue), Application.WorksheetFunction.Match(idTmp, table.Columns(indexID), 0))
    ResValue = strTmp & ResValue
    idTmp = Application.WorksheetFunction.Index(table.Columns(indexParentID), Application.WorksheetFunction.Match(strTmp, table.Columns(indexValue), 0))
Loop
ResValue = Application.WorksheetFunction.Index(table.Columns(indexValue), Application.WorksheetFunction.Match(0, table.Columns(indexID), 0)) & ResValue
End Function

您现在可以在工作表中使用ResValue(id, table, indexID, indexParentID, indexValue)来生成已解析的值。

注意:

  • id是您要为其生成已解析值的ID。
  • table是整个表的地址(不包括已解析的值列)。
  • 每个索引参数是每个字段的相对列索引。例如,ID位于表的第一列,因此indexID = 1,而ParentID位于第二列,因此indexParentID = 2。

在您的示例表中,您将在D3(已解决的值的第一个单元格)中输入以下内容:

=ResValue(A3,$A$3:$C$8,1,2,3)

然后你可以在列中填写这个公式。

enter image description here