我有一张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
和PARENTID
。我想通过强行附加每行的RESOLVED VALUE
来生成最后一列VALUE
的内容。
如何在Excel中执行此操作?
答案 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
是整个表的地址(不包括已解析的值列)。indexID
= 1,而ParentID位于第二列,因此indexParentID
= 2。在您的示例表中,您将在D3
(已解决的值的第一个单元格)中输入以下内容:
=ResValue(A3,$A$3:$C$8,1,2,3)
然后你可以在列中填写这个公式。