在列表中查找包含所有子项目的项目

我有两个列表如下, Column AColumn D

列

我想findColumn A包含Column D的值的所有单元格。

例如,A1应该是0,因为它包含值“a”,“b”,“c”和“d” – 所有这些都在列D中。

A2应该是1,因为它包含值'h' – 这不在列D.

我的公式到目前为止非常简单:

 =COUNTIF(D1:D7,"*"&$A1&"*") 

我猜我可以拆分Column A的值来检查,但我不太确定。

如果可能,我想避免任何VBA。

你的问题对我来说并不完全清楚,就你想要的结果而言,在不同的情况下。

你的公式将返回一个值的数组,所以你需要说明这一点。 数组由10组成,具体取决于字符是否与D1:D7范围内的字母匹配。

如果您要返回与列“D”中的条目不匹配的列“A”项中的字母数量,请尝试:

 =LEN(A1)-SUMPRODUCT(COUNTIF(A1,"*"&$D$1:$D$7&"*")) 

SUMPRODUCT函数将COUNTIF函数返回的数组相加。

如果你想要别的东西,你需要更具体。

交叉表格布局

使用你的逻辑,只需要不同的数据布局,你可以做到这一点:

在这里输入图像说明

B4的公式为: =COUNTIF(B$3;"*"&$A4&"*")
B1的公式是: =B2-SUM(B4:B10)

这是更多的评论,但我还没有足够的评论声望。

例如,如果A1包含“abca”,它将返回1而不是0,因为“a”的数组条目包含“abca”是1而不是2(它只能是0或1)。

所以请注意,只有在字母不重复的情况下才有效。

我根据我在@ronrosenfeld发现的一些数组魔法拼凑了一个公式。 (Ron似乎已经得到了回答这个问题的信任,因为我的回答是对他另一个的修改。)

以下公式适用于A列中任何string的长度,以及任何字母组合(包括重复项)。 它是作为一个正则expression式input的:

 =IFERROR(SUMPRODUCT(MATCH(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1),D$1:D$7,0)=1),1) 

您只需在B1中input,然后按照您的喜好将其复制下来。

它适用于任何长度的string。 如果单元格是空白的,则返回1,因为列表中没有任何内容。 如果您希望空白单元格为0,则可以调整该情况的公式。 暴力手段:

 =if(isblank(a1),0,IFERROR(SUMPRODUCT(MATCH(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1),D$1:D$7,0)=1),1))