用excel如何提取出两字段中字符串部分相同的数据

要求:只要c字段中的字符串包含d字段中以逗号分隔的任一字符串,就提取出改行。在下例中,c1中包含“母的”,和d1中第1、2个逗号分隔的“母的“相同;c3中包含”雌“,和d3中第3、4个逗号分隔的”雌“相同,因此提取出第1、3条数据。

ID a b c d
1 草 草马 母的马 ,草,母的,雌,
2 草 草稿 初步写出的文稿或初步画出的画稿。 ,草,母的,雌,
3 草 草马 雌马 ,草,母的,雌,

要先把D列以中文逗号作分隔符,分列成3列,再用公式判断、提取符合条件的行。达到下图效果之后,再进一步完成。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-07-15
亲,您这规则不对呀。A2包含“草”,为什么不提取呢?
还有,D列用“,”分隔的词组最多有多少个?前面需要判断的A/B/C/……,最多会到多少列?如果太多的话,辅助列会加N多,公式要占N多列,不如用VBA了。
例如:现在您的D列有三个词组,前面A/B/C有三列需要判断,一共就是3x3=9,需要判断9次,后面加辅助列不说,每个辅助列里面的公式至少得把A/B/C判断一次。追问

其实跟a、b列没什么关系,就是c、d列的事儿。D列用“,”分隔的词组最多有200多个,恐怕用辅助列不现实。vba您知道怎么写吗?

追答

VBA已经写好了,附件已上传,看不见按Ctrl+F5刷新页面

本回答被提问者采纳
第2个回答  2014-05-07

首先使用分列操作,将d列的数据按照“,”分开,分成分列1,2,3三个新列,然后再在右侧新建三列,分别判断分列1,2.3三列中的字符有没有在c中出现,出现为1,未出现为0,然后新建提取列,将三个判断值进行或运算,即可得到是否该提取该列内容,最后使用自动筛选,筛选出提取列为TRUE的数据。


追问

你说的倒是不错,可是实际应用中,d字段以逗号分隔的字符串会有200多个,以这个方法excel运算极慢不说,分列的工作量也很大。而且d列中的字符串可能出现在c列字符串的前、中、后任何地方。有没有更好的方法?

追答

可能你还没有完全理解我的方法。

分列操作不是手动的,是使用Excel2010中的分列功能,自动完成的,整个过程不超过10s

后续的判断列,是查找d列的每个字符是否有在c列字符串中出现过,不存在前中后的问题,出现过为1,未出现为0,而且这个公式是可以直接往后拖拽填充的,所花时间不超过30s,然后最后一个提取列,则综合前面所有判断,只有d列中有一个字符出现过,即判断为真。最后达到你要的效果。

不过这里有一个小问题,不知道你d字段分隔的字符数目是不是一样的,如果不一样,后续的判断语句可能要更改一下。

改成这样:

=IF(F2="",0,IF(IFERROR(FIND(F2,$D2,1),0),1,0))

第3个回答  2018-03-01
提取出改行是真的没有弄明白意思,大概估计了一下,e1单元格的公式这样{=IF(SUM(IFERROR(FIND({"草","母的","雌"},D2),0)),PHONETIC(A2:D2),"")},前提是你的id列要文本格式,或者phonetic函数换成CONCATENATE(A2,B2,C2,D2)表达本回答被网友采纳
第4个回答  推荐于2016-03-25
应该用到三个字符串函数:LEFT、RIGHT、MID
1、LEFT函数:
用法:LEFT(要提取字符所在单元格,从左侧开始提取的个数)
例如:=LEFT(A1,2) 意思是从A1单元格提取前两个字符。
2、RIGHT函数:
用法:RIGHT(要提取字符所在单元格,从右侧开始提取的个数)
例如:=RIGHT(A1,2) 意思是从A1单元格提取最后两个字符。
3、MID函数:
用法:MID(要提取字符所在单元格,开始位置,提取个数)
例如:=MID(A1,2,2) 意思是从A1单元格提的第二个单元格开始,提取两个字符,也就提取A1单元格第2个和第3个字符。
注:用MID函数,也可以替代前两个函数,比如:=MID(A1,1,2)与=LEFT(A1,2)的结果是一样的,再比如:=MID(A1,LEN(A1)-2+1,2)与=RIGHT(A1,2)的结果是一样的只是这里用到LEN函数,其作用是取得单元格字符串的长度。
4、提取后的字符合并:
字符合并要用到连接符号:&
比如:=LEFT(A1,2)&RIGHT(A1,2) 意思是把A1单元格的前两个和最后两个字符,提取出来组成一个新的字符。
相似回答