Excel VBA – 将编号列表结合到位置string(例如2.5.3.1)。

有可能从列AE到H列的结果不使用VBA? 你有什么build议如何做到这一点? 谢谢

在这里输入图像说明

它需要看上面的行,所以你需要粘贴在第2行,并从那里拖动。 在第1行中,您将遇到ref错误,但仍然可以正常工作。 对于未来,您可能需要在顶部添加一个额外的空行,并在H2和下面有公式。

 H2: =IF(COUNT(A2:E2)=0,H1,IF(A2<>"",A2&".",LEFT(H1,FIND("|",SUBSTITUTE(H1,".","|",MATCH(TRUE,INDEX(A2:E2<>"",0),0)-1),1))&INDEX(A2:E2,1,MATCH(TRUE,INDEX(A2:E2<>"",0),0))&".")) 

我知道它看起来像一团糟,但我会尽力解释它:

 IF(COUNT(A2:E2)=0,H1 

这是空行。 如果空用上面的那个

 IF(A2<>"",A2&"." 

如果A2的值是以全新的文本开始的

 INDEX(A2:E2<>"",0) 

如果单元格为空,则返回true / false的数组

 MATCH(TRUE,INDEX(A2:E2<>"",0),0) 

这为您提供了新数据的列号

 SUBSTITUTE(H1,".","|",MATCH...) 

用|来补充第n个点 这是因为我们可以使用Find来弄清楚上面要保留多less文本。

 INDEX(A2:E2,1,MATCH(TRUE,INDEX(A2:E2<>"",0),0)) 

是新的数据

您可以通过在可隐藏的一组列中构build目标来实现。

从上例中,如果添加I,J,K和L列,请使用以下公式:

单元格I1: =A1 & "."

单元格J1: =IF(B1="","",B1 & ".")

单元格K1: =IF(C1="","",C1 & ".")

单元格L1: =IF(D1="","",D1 & ".")

所有其他行:

栏I: =IF(A2="",I1,A2 & ".")

列J: =IF(B2="",IF(I2=I1,J1,""),B2 & ".")

列K: =IF(C2="",IF(J2=J1,K1,""),C2 & ".")

列L: =IF(D2="",IF(K2=K1,L1,""),D2 & ".")

然后将列H设置为:

 =I1 & J1 & K1 & L1 & M1 

这大致翻译为“如果没有新的号码,使用上面的行号码,除非父母号码已经改变,在这种情况下使用空白。

您可以隐藏I,J,K和L列,或者如果这些列不可用,可以使用右侧的替代列。