Excel基于级别生成基于公式的序列

我想要达到的是以下几点

ID Name Level 1 ABC 1 11 ABC 2 11001 ABC 3 1100101 ABC 4 110010101 ABC 5 11001010101 ABC 6 11002 ABC 3 1100201 ABC 4 110020101 ABC 5 11002010101 ABC 6 11002010102 ABC 6 110020102 ABC 5 11002010201 ABC 6 11002010202 ABC 6 11002010203 ABC 6 2 ABC 1 21 ABC 2 21001 ABC 3 2100101 ABC 4 210010101 ABC 5 210010102 ABC 6 21002 ABC 3 

我有以下代码在Excel中生成此代码,但我不能实现上述,任何人都可以帮助我,请在下面find我使用的公式:

 =CONCATENATE(COUNTIF($D$9:D18,1),IF(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=1,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,2),COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=1,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,2),""),IF(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=2,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,3),TEXT(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=2,ROW(D9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,3),"000"),""),IF(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=3,ROW(D9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,4),TEXT(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=3,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,4),"00"),""),IF(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=4,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,5),TEXT(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=4,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,5),"00"),""),IF(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=5,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,6),TEXT(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=5,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,6),"00"),""),IF(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=6,ROW(D9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,7),TEXT(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=6,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,7),"00"),""),IF(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=7,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,8),TEXT(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=7,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,8),"00"),""),IF(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=8,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,9),TEXT(COUNTIF(INDIRECT("D"&MAX(IF(INDIRECT(ADDRESS(9,4)):INDIRECT(ADDRESS(ROW(),4))=8,ROW($D$9:INDIRECT(ADDRESS(ROW(),4))),0))):D18,9),"000"),"")) 

基本上我试图自动生成ID字段中的代码,让我解释它是如何工作的:ID是使用Levels字段设置的,Level 1字段是它所代表的ID字段中的第一个数字,Level 2是第二个数字等级3是2位数后面的3位数,后面是2位数。 此外,一旦分配了1级,就不能分配给另一级1,因此第二级1将给出下一个数字,其第一级2将有1作为数字,而第二级2将给出2,同样的为下面的代码。

我的代码的问题是,它计算的罚款,直到第一级1及其下面的代码,但是,但是它的开始行为不正确,因为我去代码,它不应该打印级别代码4,5,6和更多如果我正在产生一个3级。这些是我面临的一些问题

提前致谢

我可以做到这一点,虽然我使用了一个帮手列。 它可以都在一个单元格中,但它变得更长,然后我想看到一个公式

如果您在A列中有水平,您将在列B中计算一个十进制ID,并在C列中计算一个实际的ID

单元格B2 = 1(因为该公式不适用于系列的第一个)

列B中的其他单元格使用公式

=INDIRECT("B"&MAX(ROW($A$2:A2)*($A$2:A2<=A3)))+INDEX({1,0.1,0.0001,0.000001,0.00000001,0.0000000001},MATCH(A3,{1,2,3,4,5,6},0))

inputCtrl + Shift + Enter

该公式从具有小于或等于自身的级别的最后一行(间接部分)中find小数ID的值,

索引查找Level,并将正确的数值添加到公式的第一部分中find的值。

C列使用公式

=B2*10^IF(B2=INT(B2),0,LEN(B2)-FIND(".",B2))

通过查找小数点(如果语句),然后将该数字提高10并乘以小数点ID,将该数字四舍五入到整数。

如果你真的需要在一列中做到这一点,你可以在第二个公式中的任何地方粘贴整个第一列,但这会使公式完全无法辨认。

在这里输入图像描述

戈登

第2部分

根据更高层次的要求,我不得不使用主要处理文本的另一种技术。

而不是使用公式构build的公式,我创build了一个独立的表格,这使得它更容易处理,你可以引用这个命名的范围,一个单独的图表,或者只是把公式,如果你想要的公式。

在这里输入图像说明

对于你进入Level和sigfigs的单元格。

数字保持在sigfigs从-1以上的级别( M3=L2-1

Digit Add start是从上面的级别( N3=L2

数字添加长度= sigfigs从水平 – sigfigs从水平以上+1(`O3 = L3-L2 + 1)

对于实际的索引公式,第一行再次具有值1,然后在单元格B3中使用

=LEFT(B2,INDEX($M$2:$M$12,MATCH(A3,$K$2:$K$12,0))) & MID(B2&"00000",INDEX($N$2:$N$12,MATCH(A3,$K$2:$K$12,0)),INDEX($O$2:$O$12,MATCH(A3,$K$2:$K$12,0)))+1

打破这一点

=LEFT(B2,INDEX($M$2:$M$12,MATCH(A3,$K$2:$K$12,0)))

意味着保持索引的左边部分在上面。 find从数字保持列的长度

MID(B2&"00000",INDEX($N$2:$N$12,MATCH(A3,$K$2:$K$12,0)),INDEX($O$2:$O$12,MATCH(A3,$K$2:$K$12,0)))+1

意味着添加一堆零到最后,所以你可以使用比当前更高的级别。 find你需要开始的数字,以及你想要使用的位数。 给这个值加1。

他们之间的&符号将连接在一起。

A2放置1

在单元格A3和下面,放置这个公式:

 =CHOOSE(C3, LEFT(A2,1)+1, IF(C2=1,A2*10+1,LEFT(A2,2)+1), IF(C2=2,A2*1000+1,LEFT(A2,5)+1), IF(C2=3,A2*100+1,LEFT(A2,7)+1), IF(C2=4,A2*100+1,LEFT(A2,9)+1), IF(C2=5,A2*100+1,LEFT(A1,11)+1))