我想要实现的是以下
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中有以下代码来生成此代码,但我无法实现上述目标,任何人都可以帮助我,请在下面找到我正在使用的公式:
=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字段中的代码,让我解释它是如何工作的:使用Level 1的Levels字段设置ID,它是它所代表的ID字段中的第一个数字,对于Level 2,它是3级的第2位,2位后的3位,以及每级的2位数。此外,一旦分配了1级,它就不能分配到另一个级别1,因此第二级1将给出下一个号码,其第一级2将具有1作为数字而第二级2将在其中给它2并且相同的去对于以下代码。
我的代码的问题是,它计算的值一直到第一级1及其下面的代码,但是当它下载代码时它的开始表现不正确,它不应该打印4,5,6的级别代码如果我生成3级,则更多。这些是我面临的一些问题
提前致谢
答案 0 :(得分:2)
将1
放在A2
。
在单元格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))
答案 1 :(得分:1)
虽然我使用辅助列,但我可以这样做。它可以全部进入一个单元格,但它比我希望看到的公式更长
如果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))
使用Ctrl
+ Shift
+ Enter
此公式从最后一行中找到小于或等于其自身的十进制ID的值(间接部分)
索引查找级别并将正确的金额添加到公式第一部分中找到的值。
C列使用公式
=B2*10^IF(B2=INT(B2),0,LEN(B2)-FIND(".",B2))
通过查找小数点数(if语句)然后将10提高到该幂并乘以小数ID来将数字四舍五入为整数。
如果您确实需要在一个列中执行此操作,则可以在第二个公式中看到B2
的任何位置粘贴整个第一列,但这会使公式完全难以理解。
戈登
第2部分
根据更多级别的要求,我不得不使用一种主要处理文本的不同技术。
我没有使用内置于公式中的数组,而是创建了一个单独的表,使其更容易处理,您可以使用命名范围,单独的图表引用它,或者只是将数字放在公式中,如果你想要的话
对于您输入Level和sigfigs的单元格。
保持的数字是从上面的水平减去1(M3=L2-1
)
数字添加开始是上面级别(N3=L2
)
数字从level - sigfigs增加length = 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)))
表示将索引的左侧部分保留在上方。从数字保持列
中找出要保留的长度 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
表示在末尾添加一堆零,这样您就可以使用比当前级别更高的级别。找到您需要开头的数字,以及您要使用的位数。将1加到此值。
&amp;他们之间的标志将它们连接在一起。