4

我有一个看起来像这样的 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

每行都有一个ID和一个PARENTIDRESOLVED VALUE我想通过递归地附加VALUE每一行的内容来生成最后一列的内容。

如何在 Excel 中执行此操作?

4

2 回答 2

3

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

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

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

于 2012-04-12T13:49:14.470 回答
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)

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

在此处输入图像描述

于 2012-04-12T14:30:28.827 回答