使用 Google 工作表筛选器减去数组(设置差异)

Subtract arrays (Set Difference) with Google Sheets Filter

我需要在 google sheet 秒中过滤一个数组,以从第二个数组中的现有元素中删除第一个数组的所有元素。

数组总是排序的,尽管可能包含重复项。但使事情复杂化的是,数组不是 sheet 中的范围(它们是分隔的文本字符串),并且它们的大小通常不同,例如"a, b, d" - "b, c"(应计算为 "a, d")。

问题第 1 部分:我使用 FILTER 和 COUNTIF 来实现 A - B 的基本逻辑(为简单起见,仅在范围内) ) 是

FILTER(A1:1, COUNTIF(A1:1, B1:1)=0)

但是这些测试用例失败了(应该是❌是):

{a,b,c}-{}⥱{a,b,c}✅
{a,b,c}-{a}⥱{b,c} ✅   {a,b,c}-{b}⥱{a,c}❌{b,c}      {a,b,c}-{c}⥱{a,b}❌{b,c}
{a,b,c}-{a,b}⥱✅       {a,b,c}-{b,c}⥱{a}❌{c}        {a,b,c}-{a,c}⥱{b}❌{c}
{a,b,c}-{d}⥱{a,b,c}✅  {a,b,c}-{b,d}⥱{a,c}❌{b,c}    
{}-{a}⥱{}✅            {}-{a,b}⥱{}✅
{}-{}⥱{}✅
{a,b,c}-{a,b,c}⥱{}✅ 

我是否应该使用其他实现方式,也许是 MATCH?

问题第 2 部分:因为我需要使用定界文本而不是范围,所以我用 SPLIT(A1, ",") 拆分我的字符串以获得我的数组,但是必须填充它们并使用 array_constraint 使它们具有相同的大小,以便我可以使用 FILTER 和 COUNTIF 函数,例如

ARRAY_CONSTRAIN(SPLIT(CONCATENATE(A1,REPT(",",999)),",",false,false),1,999)

是否有更直接、不太复杂的方法来获取可在 FILTER 和 COUNTIF 中使用的数组?

我偶然发现了这个 sheet 作者 Marc Meyer:https://docs.google.com/spreadsheets/d/1-beBOT1CjVyny7QwLz-RQCeN6fDTcIpLI1iZIjdTSgI/edit#gid=0

问题第 1 部分:我使用 FILTER 和 COUNTIF 来实现 A - B 的基本逻辑(为简单起见,仅在范围内) 应该是

=FILTER(A1:1, ISERROR(MATCH(A1:1, B1:1, false)))

并使用它,我可以将大小不等的数组传递给它,从而避免了填充和拼接的需要。