将 UNIQUE 与不同工作表上的非相邻列一起使用
Using UNIQUE with non-adjecent columns on different sheets
我在两个 sheet 上有两个表 - 比如说 tblFruits1 和 tblFruits2。
两者都有一列“名称”。
例如,Apple 在两个列表中都存在。
列表可能有不同的行数
Sheet1 上的 tblFruits1
Name
Color
Apple
red
Peach
yellow
Ananas
yellow
Sheet2 上的 tblFruits2
Name
Color
Apple
red
Cherries
red
Banana
yellow
Melone
green
现在我想在第三个 sheet 上获得两个表名称的唯一列表。
Sheet3 的预期结果
Name
Apple
Peach
Ananas
Cherries
Banana
Melone
=UNION((tblFruits1[Name],tblFruits2[Name]))
returns 一个错误。
我尝试了 SEQUENCE
和 INDEX
的变体,但没有成功。
所以问题是:
如何从两个不同 sheet 上的两个列范围“构建”UNIQUE 的矩阵参数?
(我正在寻找的是 非 VBA 解决方案 - 我知道如何在 VBA 中处理它。)
你能不能这样试试,把你的Sheet1数据和Sheet2数据做成Table
在您的 Sheet3 单元格 A2 中复制粘贴下面的公式
=UNIQUE(FILTERXML(""&TEXTJOIN("",1,(IFNA(IF({0,1},Table 1[姓名],Table2[姓名]),"")))&"","//b"),FALSE,FALSE)
尝试:
=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)))))
因为找到多个范围的并集本身就是一个非常有用的函数,所以我使用 LAMBDA 来做到这一点。然后可以将其输出传递给 UNIQUE
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]))
给你想要的结果
这是我创建的一个解决方案,您可以在其中将 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))))))
)
有一个新函数可以简化这个:VSTACK
对于唯一(不同)联合(根据原始问题),试试这个:
=UNIQUE((tblFruits1[Name],tblFruits2[Name]))
并对它们进行排序:
=SORT(UNIQUE((tblFruits1[Name],tblFruits2[Name])))
我在两个 sheet 上有两个表 - 比如说 tblFruits1 和 tblFruits2。 两者都有一列“名称”。 例如,Apple 在两个列表中都存在。 列表可能有不同的行数
Sheet1 上的 tblFruits1
Name | Color |
---|---|
Apple | red |
Peach | yellow |
Ananas | yellow |
Sheet2 上的 tblFruits2
Name | Color |
---|---|
Apple | red |
Cherries | red |
Banana | yellow |
Melone | green |
现在我想在第三个 sheet 上获得两个表名称的唯一列表。
Sheet3 的预期结果
Name |
---|
Apple |
Peach |
Ananas |
Cherries |
Banana |
Melone |
=UNION((tblFruits1[Name],tblFruits2[Name]))
returns 一个错误。
我尝试了 SEQUENCE
和 INDEX
的变体,但没有成功。
所以问题是:
如何从两个不同 sheet 上的两个列范围“构建”UNIQUE 的矩阵参数?
(我正在寻找的是 非 VBA 解决方案 - 我知道如何在 VBA 中处理它。)
你能不能这样试试,把你的Sheet1数据和Sheet2数据做成Table 在您的 Sheet3 单元格 A2 中复制粘贴下面的公式
=UNIQUE(FILTERXML(""&TEXTJOIN("",1,(IFNA(IF({0,1},Table 1[姓名],Table2[姓名]),"")))&"","//b"),FALSE,FALSE)
尝试:
=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)))))
因为找到多个范围的并集本身就是一个非常有用的函数,所以我使用 LAMBDA 来做到这一点。然后可以将其输出传递给 UNIQUE
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]))
给你想要的结果
这是我创建的一个解决方案,您可以在其中将 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))))))
)
有一个新函数可以简化这个:VSTACK
对于唯一(不同)联合(根据原始问题),试试这个:
=UNIQUE((tblFruits1[Name],tblFruits2[Name]))
并对它们进行排序:
=SORT(UNIQUE((tblFruits1[Name],tblFruits2[Name])))