Excel 中另一个唯一值内的唯一值序列
Sequence Unique Values Within Another Unique Value in Excel
我正在尝试创建一个公式来检查 A 列的唯一值,然后获取该值并检查 B 列的唯一值并在 C 列中按顺序对它们进行排序。C 列是公式所在的位置。它不在实际数据集中。
这就是我希望我的数据集的样子。
例如,我想找到唯一的条目号“123-A。然后我想在该条目号内查找并找到 B 列中的唯一代码并按顺序排列它们。前两个相同,所以它们都是序列 1。然后第三行作为新代码,"Y09",因此它将得到序列 2。一旦识别出下一个唯一条目编号,我想重置序列计数。谢谢!
所以,我们要做的第一件事是检查号码是否已经已经分配。由于要检查 2 列,我们需要将 INDEX MATCH
与数组条件一起使用,而不仅仅是 VLOOKUP
:
INDEX($C:$C1, MATCH(1, ($A:$A1=$A2)*($B:$B1=$B2), 0))
这些公式适用于单元格 C2 - 请注意我们如何在每个范围引用中保留 second 单元格而没有 $
将其锁定到位。这意味着它将始终停在公式 上方的 行
如果成功,我们就完成了。如果它 不 我们得到一个错误 - 所以,我们可以使用 IFERROR
:
=IFERROR(INDEX($C:$C1, MATCH(1, ($A:$A1=$A2)*($B:$B1=$B2), 0)), ???)
关于替换那些问号!
由于没有匹配项,我们需要为条目号找到最大匹配项,并为其加1。如果你有Office365或者Office2019,我们直接使用MAXIFS
功能即可。否则,我们将不得不使用 SUMPRODUCT
和 MAX
来获得相同的结果:(如果条目号不存在,这将 return 0)
MAXIFS($C:$C1, $A:$A1, $A2)
SUMPRODUCT(MAX($C:$C1 * ($A:$A1=$A2)))
然后,加1:
=IFERROR(INDEX($C:$C1, MATCH(1, ($A:$A1=$A2)*($B:$B1=$B2), 0)), MAXIFS($C:$C1, $A:$A1, $A2) + 1)
=IFERROR(INDEX($C:$C1, MATCH(1, ($A:$A1=$A2)*($B:$B1=$B2), 0)), SUMPRODUCT(MAX($C:$C1 * ($A:$A1=$A2))) + 1)
看来您的数据已经 organized/sorted A 和 B 列值。如果是这种情况,我们可以构造一个公式来实现以下规则:
- 如果相邻的 A 和 B 值与它们上方的值匹配,则向下复制 C 上面的值
- 如果相邻的 A 值与其上方的值匹配,但 B 值不匹配,则递增 C 上面的值。
- 如果 A 值不是它上面的值,则将 C 值设置为 1
在C2中输入1
。在 C3 中输入:
=IF(AND(A3=A2,B3=B2),C2,IF(A3=A2,C2+1,1))
并向下复制:
如果您的数据组织方式与图片所示不同,请忽略此解决方案。
我正在尝试创建一个公式来检查 A 列的唯一值,然后获取该值并检查 B 列的唯一值并在 C 列中按顺序对它们进行排序。C 列是公式所在的位置。它不在实际数据集中。
这就是我希望我的数据集的样子。
例如,我想找到唯一的条目号“123-A。然后我想在该条目号内查找并找到 B 列中的唯一代码并按顺序排列它们。前两个相同,所以它们都是序列 1。然后第三行作为新代码,"Y09",因此它将得到序列 2。一旦识别出下一个唯一条目编号,我想重置序列计数。谢谢!
所以,我们要做的第一件事是检查号码是否已经已经分配。由于要检查 2 列,我们需要将 INDEX MATCH
与数组条件一起使用,而不仅仅是 VLOOKUP
:
INDEX($C:$C1, MATCH(1, ($A:$A1=$A2)*($B:$B1=$B2), 0))
这些公式适用于单元格 C2 - 请注意我们如何在每个范围引用中保留 second 单元格而没有 $
将其锁定到位。这意味着它将始终停在公式 上方的 行
如果成功,我们就完成了。如果它 不 我们得到一个错误 - 所以,我们可以使用 IFERROR
:
=IFERROR(INDEX($C:$C1, MATCH(1, ($A:$A1=$A2)*($B:$B1=$B2), 0)), ???)
关于替换那些问号!
由于没有匹配项,我们需要为条目号找到最大匹配项,并为其加1。如果你有Office365或者Office2019,我们直接使用MAXIFS
功能即可。否则,我们将不得不使用 SUMPRODUCT
和 MAX
来获得相同的结果:(如果条目号不存在,这将 return 0)
MAXIFS($C:$C1, $A:$A1, $A2)
SUMPRODUCT(MAX($C:$C1 * ($A:$A1=$A2)))
然后,加1:
=IFERROR(INDEX($C:$C1, MATCH(1, ($A:$A1=$A2)*($B:$B1=$B2), 0)), MAXIFS($C:$C1, $A:$A1, $A2) + 1)
=IFERROR(INDEX($C:$C1, MATCH(1, ($A:$A1=$A2)*($B:$B1=$B2), 0)), SUMPRODUCT(MAX($C:$C1 * ($A:$A1=$A2))) + 1)
看来您的数据已经 organized/sorted A 和 B 列值。如果是这种情况,我们可以构造一个公式来实现以下规则:
- 如果相邻的 A 和 B 值与它们上方的值匹配,则向下复制 C 上面的值
- 如果相邻的 A 值与其上方的值匹配,但 B 值不匹配,则递增 C 上面的值。
- 如果 A 值不是它上面的值,则将 C 值设置为 1
在C2中输入1
。在 C3 中输入:
=IF(AND(A3=A2,B3=B2),C2,IF(A3=A2,C2+1,1))
并向下复制:
如果您的数据组织方式与图片所示不同,请忽略此解决方案。