比较单元格中的逗号分隔数字

Comparing comma separated numbers in cells

我正在尝试比较 Reachability Set 列中的数字与 Antecedent Set 列同一行中的数字以及 return 相应单元格中的公共值Intersection Set 列。

截图:

虽然您会认为需要 VBA 解决方案,但如果您使用 lot 辅助列,使用公式实际上非常简单。这些当然可以隐藏。

您只需要在 table 的原始列的 每个 之后,等于集合中数字最大值的列数。对于提供的示例,这将是 17 列。

这是未隐藏辅助列的新 table 的屏幕截图:

将以下公式输入到每个彩色区域的左上角单元格中,并 filled/copy-pasted/ctrl-entered 输入到其余单元格中。

红细胞(进入B2):

=IF(ISERROR(FIND(","&B&",",","&$A2&",")),0,1)

绿色单元格(进入T2):

=IF(ISERROR(FIND(","&T&",",","&$S2&",")),0,1)

蓝色细胞(进入AL2):

=IF(B2*T2,AL&",","")&AM2

最后,结果进入单元格 AK:

=LEFT(AL2,LEN(AL2)-1)

公式的工作原理是确保集合中的所有数字都有一个前后逗号,以便可以唯一地搜索它们。

然后为集合构建网格是一件简单的事情,其中​​ 1 表示集合中存在数字,0 表示不存在。将这两个网格相乘得到 "intersection set".

那么重构结果字符串就是一件简单的事情了。


警告:

如果 "Set" 数据中有任何空格,此解决方案将无法正常工作。要克服这个问题,您需要使用 SUBSTITUTE() 函数。

在 Excel 2016 年(但不是 Excel 2013 年),您可以使用以下 array-entered 公式。

=TEXTJOIN(",",TRUE,IFERROR(1/(1/(ISNUMBER(FIND(","&TRIM(MID(SUBSTITUTE(B2,",",REPT(" ",99)),seq_99,99))&",",","&A2&","))))*TRIM(MID(SUBSTITUTE(B2,",",REPT(" ",99)),seq_99,99)),""))

seq_99 是一个命名公式

Refers to:  =IF(ROW(INDEX(:535,1,1):INDEX(:535,255,1))=1,1,(ROW(INDEX(:535,1,1):INDEX(:535,255,1))-1)*99)

要输入数组公式,在单元格中输入公式后,按住ctrl+shift同时敲[=确认25=]输入。如果操作正确,Excel 将在公式周围放置大括号 {...}