与大多数 Excel 问题一样,这可以通过宏来完成,但也可以只用公式来完成。宏通常比它们的价值更麻烦,所以这里是公式选项。以这种方式使用公式有一些有趣的缺点,主要是如果你在一个工作簿中做太多事情,计算会很慢。但只要您处理的行数少于几千行,这应该不是问题。
在您的主工作表上,在D2 中输入此公式,然后将其拖动以自动填充您预计使用的行数。完成后,如果适合您,您可以隐藏 D 列。
=IF(COUNTIF($C:$C,$C2)<2,MAX($D$1:$D1)+1,0)
COUNTIF 公式查找 C 列中有多少元素与 $C2 的内容匹配(其中 $C2 是(部分)相对引用,因此当您自动填充到其他行时,行号会发生变化)。如果计数小于 2($C2 中的元素是唯一的),则 IF 公式返回一个索引号:1 表示列中的第一个唯一元素,2 表示第二个,依此类推. D 列中的所有单元格,其中 C 中的相应单元格不是唯一的,都用0 填充。
在第二张工作表上,您将使用“查找”公式填充 A 列和 B 列,在主工作表的 D 列中搜索正值。大多数人使用VLOOKUP() 进行查找,我更喜欢combination of INDEX() and MATCH()。这是一个很好的例子,因为我们的“唯一索引”不在主工作表的第一列(所以 VLOOKUP 不起作用!)。
=IFERROR(INDEX('Primary Sheet'!$A:$A,MATCH(ROW(A2)-1,'Primary Sheet'!$D:$D,0)),"")
对于第二张表的“Mname”列,
=IFERROR(INDEX('Primary Sheet'!$C:$C,MATCH(ROW(B2)-1,'Primary Sheet'!$D:$D,0)),"")
这些查找公式基于它们自己的行号。因此单元格A2 中的公式正在查找Primary Sheet 的D 列中包含唯一索引2-1=1 的行。 A3 中的公式查找索引 3-1=2 等。包裹在查找公式周围的 IFERROR() 公式可确保如果未找到所需索引,则公式返回空字符串(""),它看起来像一个空白单元格。这样,您可以使用这些查找公式在辅助工作表上准备大量行。如果 Primary Sheet 上只有少量唯一的 Mname,则您的辅助工作表将不会有充满 #N/A 错误的列。