【问题标题】:Comparing comma separated numbers in cells比较单元格中的逗号分隔数字
【发布时间】:2018-03-12 06:48:26
【问题描述】:

我正在尝试将Reachability Set 列中的数字与Antecedent Set 列的同一行中的数字进行比较,并返回Intersection Set 列的相应单元格中的公共值。

截图:

【问题讨论】:

  • 有什么问题?你被困在哪里了?
  • 您需要VBA 代码来实现这一点。所以先google搜索学习vba,然后自己尝试一些代码,把你试过的代码贴在这里。

标签: excel excel-2013 excel-2016


【解决方案1】:

在 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($1:$65535,1,1):INDEX($1:$65535,255,1))=1,1,(ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))-1)*99)

要输入数组公式,在单元格中输入公式后,按住 ctrl + shift 的同时按 enter 进行确认。如果操作正确,Excel 会在公式周围放置大括号 {...}

【讨论】:

  • 看到这个答案后我惊呆了,过去 6 小时我一直在努力寻找出路。令人兴奋的逻辑
  • @RanjithRaj 谢谢。不幸的是,在 2016 年 TEXTJOIN 函数之前没有辅助列是不可能的。
  • 我没有得到结果,你能把tat excel文件发给我吗
  • 你得到什么结果?
【解决方案2】:

虽然您会认为需要 VBA 解决方案,但使用公式执行此操作实际上非常简单,只要您使用 很多 帮助列。当然,这些可以隐藏。

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

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

以下公式被输入到每个彩色区域的左上角单元格中,并填充/复制粘贴/ctrl-输入到其余单元格中。

红细胞(输入B2):

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

绿色单元格(输入T2):

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

蓝格(输入AL2):

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

最后,结果输入到单元格AK

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

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

然后,为集合构造一个网格是一件简单的事情,其中​​1 表示该数字存在于集合中,而0 表示它不存在。将这两个网格相乘得到“交集”。

那么重构结果字符串就很简单了。


警告:

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

【讨论】:

  • 谢谢你,tat 非常有用。你有很好的逻辑思维
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2011-03-18
  • 1970-01-01
相关资源
最近更新 更多