microsoft excel

如何将A列中的值与B、C或D列中的值进行匹配,并返回找到匹配的列的名称

我有一个看起来像这样的表(但有成千上万的行)。

A B C D
a1 a3 a1 a4
a2 a2 a5
a3
a4
a5

我们的想法是最终增加另一列,E,告诉我A的每个元素属于哪个 "类别"(B、C和D是不同的类别)。

在我看来,我想让它在B:D中搜索A的所有值,然后当它找到一个匹配时,返回找到匹配的列的名称。

不幸的是,我不习惯使用Excel(我通常使用R),有点不适应。如果有任何帮助,我将不胜感激!

所需的输出将是这样的。

A B C D E
a1 a3 a1 a4 "C"
a2 a2 a5 "C"
a3 "B"
a4 "D"
a5 "D"

试试这个解决方案。

请参考下面的屏幕截图。

在E1中,该公式为:。

=SUBSTITUTE(ADDRESS(1,MAX(IF($B$1:$D$5=A1,COLUMN($B$1:$D$5),0)),4),1,"")

请注意,在你写完这个公式后,你必须将其转换为一个数组公式,按CTRL+SHIFT+ENTER在公式栏中。该公式将自动包含在大括号中,以表明它是一个数组公式。

没有这个步骤,它将无法正常工作。

向下拖动它,直到预定的行数。

你也可以使用IFERROR来消除任何#VALUE或#N/A的错误,并在没有找到值的情况下用空白代替它。

取决于列表的分隔符,在某些地区可能是;而不是,,你可能需要在公式中用分号代替逗号,以防万一。

如果你希望在列字母周围有双引号的话。

=""""&SUBSTITUTE(ADDRESS(1,MAX(IF($B$1:$D$5=A1,COLUMN($B$1:$D$5),0)),4),1,"")&""""



如果你有可能出现一个以上的情况,可以试试类似的方法。

=TEXTJOIN(",",,SUBSTITUTE(IFERROR(SORT(ADDRESS(1,($A2=B2:D6)*COLUMN(B2:D6),4)),""),"1",""))

这也是对各列的排序。

如果您有与 Excel 列标签匹配的文字字母标签以外的其他内容,则以下内容将全部收集。 SORT 可用于按列顺序排序,或按字母顺序排列实际标题结果:

=TEXTJOIN(",",,IFERROR(SWITCH(SUBSTITUTE(IFERROR(SORT(ADDRESS(1,($A2=B2:D6)*COLUMN(B2:D6),4)),""),"1",""),"B",B1,"C",C1,"D",D1),""))