0

我在两列中有数据:

a  1
a  1
a  2
b  3
b  4

在列表中有 4 个唯一的行。我想为每个唯一的行添加一个唯一的 ID。像这样:

1  a  1
1  a  1
2  a  2
3  b  3
4  b  4

当然,我有更多的行和列,并且日期比这个例子更复杂。

无论如何要做到这一点我擅长?Mvh Kresten Buch

4

4 回答 4

2

我有同样的问题,我为此开发了一种三公式方法。如果我嵌套它们,我可能会连接它,但是无论如何,这行得通。

假设您要“编号”的数据在 A 列中,并且表格的第一行是第 3 行。第一列(在 B 列中)计算“值”的出现次数,并且范围从表格顶部扩展随着表的增长而向下: =COUNTIF($A$3:A3,A3)

第二列的公式也随着行数的增加而扩展,每次在 B 列中遇到 1(即第一次出现新的唯一值)时,只需将事务计数加 1 =IF(B3=1,MAX($C $2:C2)+1,"") 这个即使在表格的第一行也对我有用,顺便说一句——我希望必须手动输入一个 1 来启动列表。让它在没有手动输入的情况下工作是一件好事,这意味着即使您将表格数据重新排列成不同的顺序,公式也能正常工作。

D 列中的第三个使用 vlookup 来查找值。请注意,当 vlookup 找到多个数字时,它总是会提取第一个出现的数字。=VLOOKUP(A3,$A$3:C3,3,FALSE)

请注意,如果您确实采用了整个事情,这将动态地重新编号所有数据结果。即所有公式都有效,但是“分配”给一组实际数据的数字可能会有所不同,因为它都可以从项目列表中的任何顺序开始。

我对这些公式的用例假设每个月我都会将一组新数据粘贴到表格底部,其中一些项目是前几个月重复的——即已经在表格中,其中一些是新的。

如果动态重新编号有问题,请使用“行键”,这样您就可以在最后恢复原始顺序。

于 2014-11-11T00:08:17.893 回答
1

如果你的数据没有排序,那就更复杂了……但你可以在 A2 中使用这样的东西:

=IF(COUNTIFS($B$1:B2,B2,$C$1:C2,C2)>1,INDEX($A$1:A1,IFERROR(MATCH(B2&"-"&C2,$B$1:B1&"-"&$C$1:C1,0),1)),MAX($A$1:A1)+1)

我假设没有标题,并且您已经1在单元格 A1 中输入了第一条记录。

它基本上检查公式上方的整个列,如果已经有类似的记录,它将分配先前给定的唯一 ID,如果没有,它将给出一个新 ID。

这是一个数组函数,因此如果您使用Ctrl++而不是单独使用,它将Shift起作用。EnterEnter

之所以IFERROR()存在,是因为MATCH(B2&"-"&C2,$B$1:B1&"-"&$C$1:C1,0)如果它在第 2 行(要检查的第一条记录)上会返回错误。

一旦你把它放在第一个单元格中,你就可以填写公式。

于 2013-09-25T10:56:48.763 回答
1

假设您的数据在 B2:C6 请=IF(AND(B1=B2,C1=C2),A1,A1+1)在 A2 中尝试,复制下来

于 2013-09-25T10:00:32.787 回答
0

在将数据集结构化为面板数据时,我一直在处理这个问题。假设您有多列数据,并且根据某人的姓名,每一列都是唯一的,例如:


安妮· 罗斯安妮· 弗兰克· 汤姆·
罗斯 ·
安妮



但不是让每一列都与 Anne、Rose、Frank 或 Tom 相关,而是希望它看起来像这样:

1 安妮
2 罗斯
1 安妮
3 弗兰克
4 汤姆
2 罗斯
1 安妮

这样每个名称现在都有一个唯一的数字标识符,可以用来代替名称。

制作数据的数据透视表,仅将具有名称(或任何标识符)的列放入“行”部分。这将挑出数据集中使用的所有不同名称。将此数据透视表复制并粘贴到工作表的任何位置,以便名称在实际单元格中,而不是在数据透视表之外。在名称的右侧,在名字旁边输入 1,然后输入 =B1+1,以此类推,以便为每个名称编号;然后将此列复制并粘贴为数字,以便删除其公式。最后,只需转到您的原始数据集并执行 VLOOKUP,以便名称与从数据透视表中分配的任何唯一值相关联。确保在完成后复制并粘贴为数字以删除 VLOOKUP 公式。

根据数据集的大小,实际上需要 2 分钟,而且非常容易。每次都能完美运行。

于 2018-05-24T17:15:07.223 回答