比较单元格中的逗号分隔数字
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 将在公式周围放置大括号 {...}
。
我正在尝试比较 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 将在公式周围放置大括号 {...}
。