[Excel] Как рекурсивно добавлять ячейки?


Answers

Вот решение функции 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) вы можете использовать ResValue(id, table, indexID, indexParentID, indexValue) в своем рабочем листе для генерации разрешенных значений.

Заметки:

  • id - это идентификатор, который вы хотите сгенерировать разрешенное значение.
  • table - это адрес всей таблицы (исключая столбец разрешенных значений).
  • Каждый индексный индекс является относительным индексом столбца для каждого поля. Например, идентификаторы находятся в первом столбце таблицы, поэтому indexID = 1 и ParentID находятся во втором столбце, поэтому indexParentID = 2.

В вашей примерной таблице вы должны ввести следующее в D3 (первая ячейка для разрешенных значений):

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

И тогда вы можете заполнить эту формулу по столбцу.

Question

У меня есть лист 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 путем resursively добавления VALUE каждой строки.

Как это сделать в Excel?