Google电子表格根据不同列中的信息创建唯一ID

时间:2017-01-31 20:38:03

标签: google-sheets

我想为Google电子表格中的每个项目创建唯一的ID。此ID必须反映2列中包含的信息。我制作了一个更简单的数据版本并将其作为图像WhereImAt加入。正如您在第一列中所看到的,我希望人们能够识别" city"," type"对于电子表格中的每个项目以及使该条目唯一的数字。

实际的电子表格中包含超过2k项。专栏" city"有19个可能的条目和"类型"有12个。

目前我能想到的唯一公式是" If()",但是有这么多变量,它看起来不可能或太复杂。我确信有更高效的东西......

有人能想出更好的方法来实现我的目标吗?

1 个答案:

答案 0 :(得分:0)

由于城市可能并非都以一个独特的角色开头,因此您需要一个表来查找该城市的代码。由于您拥有有限数量的城市和类型,因此您可以使用每个表来验证条目并查找代码。假设每个表(表单/表格)可以有一个名为City的表单和一个名为Type的表单。 City具有列A中列出的城市名称,从A2开始,以及列B中的相关代码。类型具有在列A中列出的类型,从单元格A2开始,相关的代码在列B中。两个工作表都使用第1行作为标题行。

因此,在您的工作表中,在单元格B2中,放置以下公式:

=CONCATENATE( VLOOKUP(C2, City!A2:B, 2, FALSE), "_", VLOOKUP(D2, Type!A2:B, 2, FALSE))

它将查找City Name和Type,为每个返回Code,并创建一个CityCode_TypeCode的字符串。

由于您有许多行数据,因此您不希望为每一行复制此公式。这就是ARRAYFORMULA的用武之地。不幸的是我们不能在ARRAYFORMULA函数中使用CONCATENATE,但有一个简单的方法。更难的部分是使用VLOOKUP,但是使用这里使用的技巧,我们可以做到这一点。我们将使用&组合字符串。并将数组添加到VLOOKUP的第三项以使其工作。最后,我将使用一个小技巧将其置于第1行并仍然应用标题。对于B列,您可以将其放在B1中,并确保列的其余部分为空:

=ARRAYFORMULA(IF(ROW(C1:C) = 1, "ID", IF(ISBLANK(C1:C),, VLOOKUP(C1:C, City!A2:B, 2 * SIGN( ROW( C1:C ) ), FALSE) & "_" & VLOOKUP(D1:D, Type!A2:B, 2 * SIGN( ROW( D1:D ) ), FALSE))))

这只会让我们到达目前只有一个公式的地方。为了达到最后一步,我需要假设数据不会被排序,插入或删除行等等。是否可以遵循这一条规则,第3行中的项目将始终位于第3行,我们可以将您带到最后一步使用行号添加 文字(行(A1:A)-1,“0000) 混合得到一个4位数字,表示比行少1,这样我们的数字从0001开始所以在你的文件中,在单元格A1中,在列的其余部分没有任何内容:

=ARRAYFORMULA(IF(ROW(C1:C) = 1, "ID", IF(ISBLANK(C1:C),, VLOOKUP(C1:C, City!A2:B, 2 * SIGN( ROW( C1:C ) ), FALSE) & "_" & VLOOKUP(D1:D, Type!A2:B, 2 * SIGN( ROW( D1:D ) ), FALSE) & "_" & TEXT(ROW(A1:A)-1, "0000"))))