Excel 为文本分配自动编号

标签 excel excel-2007 vba

我有一个电子表格,如果某个值基于另一列中的 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/

相关文章:

excel - 断点未在 VSTO 加载项中触发

java - 为什么单元格值即使有内容也会返回为空字符串?

vba - 事件 IE11 发生变化

vba - 返回单元格中有多少个单词

mysql - 如何确保使用 sql 选择的配对集不会相互排除

excel - 如何在 Shell 中运行 SSH 以将值返回到 VBA 变量中?

PHP Microsoft Excel 文件生成/导出类

excel - xlwings : Object Required

vba - 为什么此代码会禁用工作表保护?

Excel 2007 重复检查错误地将十六进制转换为指数