Excel为文本指定自动编号

时间:2015-07-23 12:25:14

标签: excel excel-vba excel-2007 vba

我有一个电子表格,如果某个值是基于另一列中的Countif公式的重复,我需要一个公式来创建类似于自动编号的行为。我想为每个具有多个订单号的名称制作一个自动#。所以在这个例子中,Joe得到的ID是1,因为他第一次是工作表而Bunny获得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

1 个答案:

答案 0 :(得分:2)

假设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.如果THAT提供错误,请参见下文。

根据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。