在Google表格公式中进行数字递增

4
在Google Sheets数据库中,我建立了一个公式,用于为一系列公司分配参考编号。 每个公司应该有形如RET00XX的唯一编号,其中XX代表唯一的公司编号。我希望这些数字是顺序的,从1开始并在此基础上递增1。 每当在数据库中插入新公司时,公式都应该能够为该公司分配一个参考号码。它还应该能够验证公司是否已经存在于数据库中,并在存在时自动赋予该公司唯一的参考编号,而不是创建一个新的编号。
公司名称位于B列单元格中。
以下是我编写的公式(第2行的示例):
=ARRAYFORMULA(IF($B2<>"",IF((COUNTIF($B$1:$B1,$B2)>0),INDEX($A$1:$R2,MATCH($B2,$B$1:$B1,0),12),CONCATENATE("RET00",ROW($B2))),""))

它所需的步骤如下:
  1. 它验证对应行中的B列不为空;
  2. 使用COUNTIF函数,验证该公司是否存在于以前的任何行中;
  3. 如果该公司确实存在,则通过INDEX函数分配相应的参考编号;
  4. 如果公司不存在,则使用CONCATENATEROW函数为公司分配新的参考编号。

公式基本上可以正常工作,但仍存在一些问题。 向此数据库添加条目的用户习惯于在数据库中间插入行。由于公式的构建方式,这会导致公司唯一参考代码每次更改。我认为这部分原因是因为我使用了ROW函数。
另外,由于在数据库中间插入了新行,因此公式应该能够通过循环遍历所有行来验证公司是否已经存在,而不仅仅是通过循环遍历之前的行(当插入新行时,公式将仅验证之前的行,而公司可能在新行之后的行中)。

如何在没有引用ROW的情况下在公式中分配连续编号?此外,如何确保电子表格验证列B的所有行而不仅仅是插入行之前的行?

5个回答

10

8

一个不依赖于开始行号的解决方案

这些示例将允许您在公式中生成递增值。

递增整数,以 0 为基础: 这些值将是:0、1、2、3 等。
注意:地址“$A$2”表示您顶行的单元格。它应该更改为实际顶行的单元格。这种方法的好处是,如果您在公式的起始位置上面插入新行,它不会出错。

=(ROW()-ROW($A$2))

整数,从1开始: 其值为:1,2,3,4等。

=(ROW()-ROW($A$2) + 1)

日期: 值将是:2000-01-01,2000-01-02,2000-01-03等。
=Date(2000,1,1) + (ROW()-ROW($A$2))

所有偶数: 其值将为:0、2、4等。

=(ROW()-ROW($A$2) * 2

3

简短回答

使用Google Apps Script

解释

在实时用作数据库的电子表格上,使用电子表格函数来设置ID是非常危险的,因为当电子表格内容发生更改时,这些值将被重新计算。

不要使用公式,而是使用脚本添加“固定值”。可以通过使用自定义菜单或侧面板、从脚本编辑器调用脚本或按时间驱动的触发器,在事件(如单元格编辑和行插入)上自动调用脚本。

以下来自Web应用程序的问答显示了几种设置顺序号的方法:

这个来自SO的也可能有帮助:


3

在第一个单元格中插入1,并将下面的公式粘贴到以下单元格中。

=INDIRECT(ADDRESS(ROW()-1,COLUMN())) + 1


0

在第一行加入数字,然后在下一个单元格中输入公式

我使用=A1+1来获得递增的数字以对每行任务进行索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接