我有一个电子表格,如果某个值基于另一列中的 Countif 公式重复,我需要一个公式来创建类似于自动编号的功能。我想为每个具有多个订单的名称创建一个自动#。因此,在这个例子中,Joe 的 ID 为 1,因为他是第一个工作表,而 Bunny 的 ID 为 2,当 Joe 的名字重复时,它仍然是 1。这个名字可能有几十个人,并且每个文件都不同。感谢您的帮助。
ORDER# LN QTY ITEM LOC NAME Countifs Auto Number
OD10560 1 24 part#12 Location 1 Joe John 1 1
OD10559 1 1 part#114 Location 2 Bunny Johnson 2 2
OD10569 1 3 part#444 Location 1 Joe John 1 1
OD10567 1 3 part#777 Location 2 Archy Bunker 0
OD10567 2 4 part#123 Location 2 Archy Bunker 0
OD10562 1 24 part#458 Location 1 Kay Harrison 0
OD10577 1 2 part#471 Location 2 Bunny Johnson 1 2
OD10577 2 1 part#736 Location 2 Bunny Johnson 1 2
OD10563 1 2 part#778 Location 1 Mark Riddle 0
OD10579 1 2 part#3347 Location 1 Terry Clark 0
这里有电子表格供公式引用, Link
最佳答案
假设countifs列是H列,name列是G列,将其放入I2并向下拖动:
=if(H2>0,iferror(index(I$1:I1,match(G2,G$1:G1,0)),max(I$1:I1)+1),"")
这首先检查该名称是否存在重复值,如 countifs 列中所定义。如果有,它会使用 MATCH 函数检查该特定名称是否已显示在此选项卡上方的行中。如果存在匹配项,则会给出该匹配项的行号。请注意,引用以对第 1 行的绝对引用和对第 1 行的相对引用开始。当您向下拖动公式时,这将拖动测试区域的底行。公式始终以公式单元格上方的单元格结束。
如果 MATCH 编号提供行号,则会将该值提供给 INDEX 函数,该函数会拉入上面在 I 列中找到的已分配编号。如果出现错误,则还没有匹配项,因此需要到目前为止在列中找到的 MAX 值,并加 1。如果出现错误,请参见下文。
根据 I1 的值,您可能需要将第一个匹配的值硬编码为“1”,或者将公式更改为以下内容:
=if(H2>0,iferror(index(I$1:I1,match(G2,G$1:G1,0)),iferror(max(I$1:I1)+1,1)),"")
这里唯一的区别是,如果 MAX 函数返回错误,则上面还没有数值,因此假定它是第一个命中,默认为 1。
关于Excel 为文本分配自动编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587302/