Excel-在两列中列出Excel中两个源列的每个唯一对
一段时间以来,我一直在使用index、match和countif来愉快地列出唯一值,但现在我想根据两列值从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
> 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),"")