Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel按顺序创建给定级别的层次结构_Excel_Excel Formula_Parent_Hierarchy_Vba - Fatal编程技术网

Excel按顺序创建给定级别的层次结构

Excel按顺序创建给定级别的层次结构,excel,excel-formula,parent,hierarchy,vba,Excel,Excel Formula,Parent,Hierarchy,Vba,我有一个唯一Id的顺序和缩进的级别。它们是按顺序排列的,因此当前ID的父ID是比当前缩进级别小1的ID(例如,如果当前缩进级别为3,则父ID将是其上第一行的ID,缩进级别为3-1=2,在这种情况下为UniqueID=4) 以下是我的数据示例: 我想要一个新列,其父UniqueID为当前UniqueID 谢谢我想明白了。我编写了一个包含以下内容的Visual Basic脚本: Function parent(r As Range) As Integer curVal = r.Value des

我有一个唯一Id的顺序和缩进的级别。它们是按顺序排列的,因此当前ID的父ID是比当前缩进级别小1的ID(例如,如果当前缩进级别为3,则父ID将是其上第一行的ID,缩进级别为3-1=2,在这种情况下为UniqueID=4)

以下是我的数据示例:

我想要一个新列,其父UniqueID为当前UniqueID


谢谢

我想明白了。我编写了一个包含以下内容的Visual Basic脚本:

Function parent(r As Range) As Integer

curVal = r.Value
desiredCol = 2

parentFound = False

counter = 1
'loop through until parent is found or at beginning
Do Until CInt(r.Row) < 2 Or parentFound = True
    If r.Offset(-counter, 0).Value < curVal Then
        parentFound = True
        desiredRow = r.Offset(-counter, 0).Row
    End If
    counter = counter + 1
Loop

parent = r.Offset(-counter + 1, -1).Value

End Function
函数父函数(r作为范围)作为整数
曲线=r.值
desiredCol=2
parentFound=False
计数器=1
'循环直到找到父项或在开始处
直到CInt(r.Row)<2或parentFound=True
如果r.Offset(-counter,0).Value

这将搜索列中级别低于该列的第一个单元格,并获取其左侧的ID值。

通过“缩进级别为X的第一行”是否表示与自顶向下一样无条件?意思是如果你的缩进级别从上到下:1,1,2,2,1,1,2,2。此序列中的最后2个将使parentID等于此序列中第一个“1”的唯一ID?与第5位或第6位的唯一ID(分别为第3/4个“1”)相比。假设前面的假设为真,您应该能够使用以下公式,从单元格D2开始,向下延伸=索引(B:B,匹配(C1-1,C:C,0))是的,克里斯,你的第一句话是正确的。至于你的第二句话,它很接近,但不起作用。以下是它从D2上返回的内容:#值#不适用,2,3,4,5,6,6,5,5,5,4,4,5,5,5,4,4,5,6,6,7,7,7,6,7。。。应该是:nothing,2,3,4,5,6,6,5,5,5,5,4,4,14,14,4,4,18,将公式包装在IFERROR中以删除#值。例如:=IFERROR(索引(..),“”)也从C2开始,而不是从单元格D2的C1开始。