excel 对不同工作表上的非邻接列使用UNIQUE

sd2nnvve  于 2022-11-18  发布在  其他
关注(0)|答案(6)|浏览(225)

我在两个工作表上有两个表--比如tblFruits 1和tblFruits 2。这两个表都有一个列“Name”。例如,Apple在这两个表上都存在。这两个表的行数可能不同

  • 工作表1上的tbl水果1 *

| 名称名称名称|颜色|
| - -|- -|
| 苹果公司|红色的|
| 桃色|黄色的|
| 菠萝属|黄色的|

  • 工作表2上的tblFruits 2 *

| 名称名称名称|颜色|
| - -|- -|
| 苹果公司|红色的|
| 樱桃色|红色的|
| 香蕉色|黄色的|
| 梅洛内|绿色|
现在我想在第三张纸上得到两个表的唯一名称列表。

工作表3上的预期结果

| 名称名称名称|
| - -|
| 苹果公司|
| 桃色|
| 菠萝属|
| 樱桃色|
| 香蕉色|
| 梅洛内|
=UNION((tblFruits1[Name],tblFruits2[Name]))会传回错误。
我尝试了SEQUENCEINDEX的变体,但没有成功。
所以问题是:

如何从两个不同工作表上的两个列区域中“构造”UNIQUE的矩阵参数?

(What我正在寻找的是非VBA-解决方案-我知道如何在VBA中处理此问题。)

r6hnlfcb

r6hnlfcb1#

VSTACK函数使Union过时(在编写时仅内部人员可用)
由于查找多个范围的并集本身是一个非常有用的函数,因此我使用LAMBDA函数来实现。
Lambda,我毫无想象地称之为UNION

=LAMBDA(tabl1, tabl2,
        LET(rowindex, SEQUENCE(ROWS(tabl1)+ROWS(tabl2)),
            colindex, SEQUENCE(1,COLUMNS(tabl1)),
            IF(rowindex<=ROWS(tabl1), 
               INDEX(tabl1,rowindex,colindex),  
               INDEX(tabl2,rowindex-ROWS(tabl1),colindex)
            )
        )
 )

然后

=UNIQUE(Union(tblFruits1[Name],tblFruits2[Name]))

提供您所寻求的结果

gzszwxb4

gzszwxb42#

请尝试:

=LET(X,CHOOSE({1,2},tblFruits1[Name],tblFruits2[Name]),Y,COUNTA(X),Z,MOD(SEQUENCE(Y)-1,Y/2)+1,A,INDEX(X,Z,CEILING(SEQUENCE(Y)/(Y/2),1)),UNIQUE(FILTER(A,NOT(ISNA(A)))))

tyky79it

tyky79it3#

这是我创建的一个解决方案,你可以用任意两个数组,动态数组等替换a2#和c2#。它还可以删除重复数据并排序。这在Excel for Mac上工作(不支持FILTERXML)

=LET(
firstArray, a2#,
secondArray, c2#,
totalCount, COUNTA(firstArray)+COUNTA(secondArray),
firstCount, COUNTA(firstArray),
SORT(UNIQUE(MAKEARRAY(totalCount,1,LAMBDA(r,c,IF(r<=firstCount,INDEX(firstArray,r),INDEX(secondArray,r-firstCount+1))))))
)
roqulrg3

roqulrg34#

你可以试着这样做,把你的Sheet 1数据和Sheet 2数据放入Table中,然后在你的Sheet 3单元格A2复制粘贴下面的公式
=唯一(过滤器XML(“"&文本连接(“****",1,(IFNA(IF({0,1},表1 [名称],表2 [名称]),"”)))&"","//b”),FALSE,FALSE)

x33g5p2x

x33g5p2x5#

有一个新的函数可以简化这一过程:VSTACK
对于唯一(不同)联合(根据原始问题),请尝试以下操作:

=UNIQUE((tblFruits1[Name],tblFruits2[Name]))

要对它们进行分类:

=SORT(UNIQUE((tblFruits1[Name],tblFruits2[Name])))
yc0p9oo0

yc0p9oo06#

此时我没有VSTACKHSTACK(或者LAMDA),除非我把工作簿保存在又慢又笨重的Excel Online上。(命名为× ×三× ×、× ×四× ×、× ×五× ×)、然后(为了保持可读性)使用一个命名公式combo,定义为=SEQUENCE(ROWS(three)+ROWS(four)+ROWS(five))

=IFS(
combo<=ROWS(three),              three,
combo<=ROWS(three)+ROWS(four),   INDEX(four,combo-ROWS(three),{1,2}),
TRUE,                            INDEX(five,combo-ROWS(three)-ROWS(four),{1,2})                                                     
    )

如果你愿意,你可以用UNIQUE和/或SORT环绕它。如果数组有3列而不是2列,那么在公式中使用{1,2,3}。显然,你可以通过在IFS公式中构建更多的条件来扩展到3个以上的数组。
也许值得注意的是,threeINDEX(three,combo,{1,2})是一样的,使用COLUMN(three)会使语法更具有普遍性,尽管如果您希望在输出中出现类似{2,1,3}的内容,它不允许您对列进行重新排序。TRUE实际上是在IFS公式中表示“ELSE”的方式--它比combo<=ROWS(three)+ROWS(four)+ROWS(five)更简洁。使用这些较长的形式会使公式更对称,但也更冗长!
(It如果VSTACK在桌面上可用,那就太好了。)

相关问题