【发布时间】:2018-03-12 06:48:26
【问题描述】:
【问题讨论】:
-
有什么问题?你被困在哪里了?
-
您需要
VBA代码来实现这一点。所以先google搜索学习vba,然后自己尝试一些代码,把你试过的代码贴在这里。
标签: excel excel-2013 excel-2016
【问题讨论】:
VBA 代码来实现这一点。所以先google搜索学习vba,然后自己尝试一些代码,把你试过的代码贴在这里。
标签: excel excel-2013 excel-2016
在 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 会在公式周围放置大括号 {...}。
【讨论】:
TEXTJOIN 函数之前没有辅助列是不可能的。
虽然您会认为需要 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() 函数。
【讨论】: