Excel-在两列中列出Excel中两个源列的每个唯一对

Excel-在两列中列出Excel中两个源列的每个唯一对,excel,excel-formula,Excel,Excel Formula,一段时间以来,我一直在使用index、match和countif来愉快地列出唯一值,但现在我想根据两列值从excel工作表中列出唯一对。例如,如果数据是这样的: 输入 对的唯一列表应为: > Col. 1 Col. 2 A x B x B y C x C y 这似乎是一个常见的建议: =索引(!D$4:D$5,匹配(0,COUNTIF($A$57:$A59,!$C$4:$C$5)*C

一段时间以来,我一直在使用index、match和countif来愉快地列出唯一值,但现在我想根据两列值从excel工作表中列出唯一对。例如,如果数据是这样的:

输入

对的唯一列表应为:

> Col. 1   Col. 2
  A        x   
  B        x 
  B        y
  C        x 
  C        y 
这似乎是一个常见的建议: =索引(!D$4:D$5,匹配(0,COUNTIF($A$57:$A59,!$C$4:$C$5)*COUNTIF($B$57:$B59,!$D$4:$D$5),0)),“”) 但不会返回像示例中的C和y对那样的值,因为C和y已经出现在不同的对中

我试过concat(在countif中不起作用)、sumproduct(似乎不喜欢sumproduct(-)($A$57:$A59=!$C$4:$C$5)、--($B$57:$B59=!$D$4:$D$5));和countifs($A$57:$A59,!$C$4:$C$5),$B$57:$B59,!$D$4:$D$5)(返回错误)


PS-我对VB一无所知,出于各种原因,我需要一种公式方法。

将两列连接起来(在两列之间使用一个明显的分隔符,比如说
,以帮助以后拆分),处理(对于单个列)然后将文本拆分为两列。

您可以使用COUNTIFS:

=IFERROR(INDEX($A$2:$B$9,MATCH(0,COUNTIFS($D$1:$D1,$A$2:$A$9,$E$1:$E1,$B$2:$B$9),0),1),"")
对于第一列和

=IFERROR(INDEX($A$2:$B$9,MATCH(0,COUNTIFS($D$1:$D1,$A$2:$A$9,$E$1:$E1,$B$2:$B$9),0),2),"")
第二栏

使用CtrlShiftEnter作为数组公式输入

注:如果包含空白单元格,则公式将给出一个虚假的额外行-这是可以修复的:

=IFERROR(INDEX($A$2:$B$9,MATCH(1,(COUNTIFS($G$1:$G1,$A$2:$A$9,$H$1:$H1,$B$2:$B$9)=0)*($A$2:$A$9<>"")*($B$2:$B$9<>""),0),1),"")

=IFERROR(INDEX($A$2:$B$9,MATCH(1,(COUNTIFS($G$1:$G1,$A$2:$A$9,$H$1:$H1,$B$2:$B$9)=0)*($A$2:$A$9<>"")*($B$2:$B$9<>""),0),2),"")
=IFERROR(索引($A$2:$B$9),匹配(1,(COUNTIFS($G$1:$G1,$A$2:$A$9,$H$1:$H1,$B$2:$B$9)=0)*($A$2:$A$9“)*($B$2:$B$9“),0),1),“”)
=IFERROR(指数($A$2:$B$9,匹配(1),(COUNTIFS($G$1:$G1,$A$2:$A$9,$H$1:$H1,$B$2:$B$9)=0)*($A$2:$A$9“”)*($B$2:$B$9“”),0),2),“”)

谢谢,非常感谢。同样,非常感谢。多年来,我一直在为这一虚假的额外排问题而烦恼!为了理解这个额外的逻辑,请您澄清一下-您已经将匹配值切换为1,这样当一个值在两个源列中时,将返回数组中第一行的索引行#,其中一个预先存在的对未被计数。countifs(…)=0是否在未找到任何内容的情况下返回1?是的,正是这样。谢谢,至少在本例中,我不能这样做,因为实际的文本值非常复杂,不适合被拆分。也许按照您对CountiF的建议进行连接,然后对原始文件进行索引可能会奏效,但我发现这种方法的复杂性急剧上升——至少在我的情况下是如此。
=IFERROR(INDEX($A$2:$B$9,MATCH(1,(COUNTIFS($G$1:$G1,$A$2:$A$9,$H$1:$H1,$B$2:$B$9)=0)*($A$2:$A$9<>"")*($B$2:$B$9<>""),0),1),"")

=IFERROR(INDEX($A$2:$B$9,MATCH(1,(COUNTIFS($G$1:$G1,$A$2:$A$9,$H$1:$H1,$B$2:$B$9)=0)*($A$2:$A$9<>"")*($B$2:$B$9<>""),0),2),"")