字符串拆分、去重、合并,你会吗?

你好,我是刘卓。欢迎来到我的公号,excel函数解析。今天来分享一个字符串拆分、去重、合并的案例。
-01-

具体应用

下图A列是数据源,每个单元格都是一个字符串。每个字符串都是由一些近义词连成的,并且用竖线分隔。其中,有些词语是重复出现的,比如第一个字符串中的“希望”就多次出现。现在的要求是将字符串中重复的词语去掉,只保留一个,结果如B列所示。

相信很多小伙伴看到我模拟的结果后就有思路了,无非是“三部曲”。

第一步,以竖线为分隔符,将字符串拆分为一个数组。

第二步,对拆分后的数组进行去重处理。

第三步,把去重后的数组重新合并为字符串。

这个问题如果用pq或者vba来做,都是比较简单的,因为它们都有现成的函数或工具可用。如果用工作表函数来做那可能就有点麻烦了,因为没有现成的函数可以用,拆分没有split,去重没有unique(365版本除外),合并没有textjoin(高版本还是有的,这个必须得有啊,要不然真没法搞了)。

虽然拆分没有split,幸好还有filterxml;虽然去重没有unique,幸好还有filterxml。

之前分享过filterxml分列的用法,其实它不仅可以分列,还可以去重。相当于一次干了2件事。想学习分列的用法,可以复习回顾《分列提取你还在用老套路吗?该尝试个新套路了。》这篇文章。

下面来看咱们的公式,在B2单元格输入下面的公式=TEXTJOIN("|",1,FILTERXML("<a><b>"&SUBSTITUTE(A2,"|","</b><b>")&"</b></a>","a/b[not(.=preceding::*)]")),按ctrl+shift+enter三键,下拉填充。
FILTERXML("<a><b>"&SUBSTITUTE(A2,"|","</b><b>")&"</b></a>","a/b[not(.=preceding::*)]")这个公式返回的结果为{"希望";"期望";"心愿";"愿望"},已经是去重后的结果。比之前分列的公式多了黑色字体的部分。可以参考下图来对比。
至于上面黑色字体中的那一串是什么意思,我也解释不来,类似于countif找第一次出现的,你可以把它当作固定的套路先用起来。想要详细了解,可以去论坛找海鲜老师的帖子。
经过filterxml拆分并去重后,得到一个数组,最后用textjoin将其连接成字符串。
下面来分享个vba的方法,效果如下图所示。
代码如下,看不清可以左右滑动。
Sub 字符串拆分去重合并() Dim arr, brr, str, cy, n% Set d = CreateObject("scripting.dictionary") arr = Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row) For Each str In arr n = n + 1 brr = Split(str, "|") For Each cy In brr d(cy) = "" Next arr(n, 1) = Join(d.keys, "|") d.RemoveAll Next Range("b2").Resize(n, 1) = arrEnd Sub
链接:

https://pan.baidu.com/s/1ZF61eevKNDAmtHwiwEEtBQ

提取码:c2v8
(0)

相关推荐

  • 统计重复次数,这样做超简单,隔壁同事都看呆!

    作者:小花 编辑:妮妮 相比于数值运算,Excel 对字符的处理,通常都要复杂的多. 因此需要我们花更多的精力和脑力来学习. 今天,小花给大家详细拆解,如何处理字符串计数问题. 小眼睛要看着老师哦! ...

  • FILTERXML函数用过没?

    今天给大家聊一个比较陌生的函数:FILTERXML 语法格式:FILTERXML(xml, xpath) 这个函数有两个必需的参数,第1参数是有效的xml格式的字符串,第2参数是指定的xpath. 正 ...

  • 如何用公式实现自动填入满足相应条件的数字?

    Q:这是一名知乎网友提出的问题,如下图1所示,在列O中自动填写N班对应的日期. 图1 A:想了半天,没有想到简单的公式.使用数组公式找到N对应的日期数不难,但是如何将找到的多个日期数连在一起却难倒了我 ...

  • 跟李锐学Excel:LOOKUP函数拆分提取合并单元格

    一学就懂.一看就会的10个Excel公式

  • 干货 | ABB机器人字符串拆分转换数值指令

    ABB机器人 字符串拆分转换数值指令 说明:ABB机器人在通讯时候,会用到字符串,发送字符串给其他设备或者其他设备发送字符串给ABB机器人,这时候ABB机器人需要对字符串进行处理.一般ABB机器人处理 ...

  • ABB机器人字符串拆分转换数值指令

    ABB机器人 字符串拆分转换数值指令 说明:ABB机器人在通讯时候,会用到字符串,发送字符串给其他设备或者其他设备发送字符串给ABB机器人,这时候ABB机器人需要对字符串进行处理.一般ABB机器人处理 ...

  • 先拆分再合并(学编程本质上是提高解决问题的能力)

    有粉丝提问:跟着我们<生信技能树>的教程:借鉴escape包的一些可视化GSVA或者ssGSEA结果矩阵的方法 做他自己的单细胞数据集的gsva发现内存不够,但他自己的个人电脑已经是32G ...

  • 8位16位32位数据的拆分与合并程序

    拆分 //16位拆成两个8位 u16 data16 = 0x1234; u8 data8_H,data8_L; data8_H = (u8)(data16 >> 8); data8_L = ...

  • 32位高低字节拆分与合并

    在MFC中一个32位整数基本都包括高字节数据和低字节数据; 1. 可以利用LOWORD()和HIWORD()获取它的高字节数据和低字节数据: int nLow = LOWORD(lParam); in ...

  • VB.NET 拆分、合并PDF工具(PDF批量打印)

    有粉丝后台留言想要拆分PDF文档的工具,那么他来了..... 上两期原文 问:为什么要自己做,不使用网上的现成工具? 答:因现在网上99%以上的PDF合并工具都是需要收费,或者要使用收费的破J版,或者 ...

  • 一步搞定表格拆分与合并,你还在用最原始的方法?

    文档排版作为一篇文章重要的收尾环节,被很多人所忽视,同时由于很多细微的排版细节完全可以通过快捷方法迅速搞定,很多人却使用最原始的办法,因此大幅降低工作效率,多数会导致出现不可描述的格式问题. 快速拆分 ...

  • Excel技巧—超实用的字符串拆分小技巧

    点赞再看,养成习惯: 当断不断,反受其乱. 我们每天都在Excel中各种操作,本质上来说就是对各种数据进行操作,而这些数据专业点来说就是字符串.因此熟悉各种对字符串的操作对于Excel日常工作中是非常 ...