excel表格同一单元格里删除重复词

本文介绍了一种使用VBA自定义函数在Excel单元格中去除重复词语的方法,通过创建和使用自定义函数,可以有效地从包含多个相同词语的单元格中保留唯一词语,适用于有特定分隔符或无分隔符的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自知乎问题:同一个单元格里删除重复词,只保留一个唯一词怎么做 ?

如下图红框,有重复词:2个“舒缓”,3个“伤感”,效果是要删掉的词有:1个“舒缓”,2个“伤感”,只留下都是唯一词。

解决方案:

作者:靳伟
链接:https://www.zhihu.com/question/51729819/answer/127363442
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

思考再三, 老衲承认, 没啥简单的办法. 只好祭出自定义函数了. (其他法子这个更麻烦)

首先, 如果你看过老衲的Excel教程, 应该还记得怎么创建一个自定义函数. 忘了? 没关系, 老衲再演示一遍.

1. 首先调出"开发工具"这个菜单. 在选项里面.


2. 点开VBA, 进入VBA界面


3. 插入一个模块, 处女座可以对这个模块起个好名字. 老衲是水瓶座, 那就哈哈哈哈啦.


4. Coding: 时间紧就不逐一细说了. 还是非常简单的. 老衲的注释率超过20%啦~
 

Public Function deduplicate(duplicateWords As String)

'declaim some vars
Dim wArray As Variant


'Split the long string and Write in and deduplicate with dictionary

wArray = Split(duplicateWords, ",")

Set dic = CreateObject("scripting.dictionary")
    For i = 0 To UBound(wArray)
        dic(Trim(wArray(i))) = ""  'Trim the string in case of irragular text
    Next
    
'Reconstruct the long string
Dim result As String

For Each wItem In dic
   result = result + "," + wItem
Next

deduplicate = Right(result, Len(result) - 1) 'remove the extra comma and return

End Function

 

5. 这时候你已经有一个新公式了


6. 这个函数只需要把左边的列选中, 然后拖动一下, 问题解决. ~~

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作者:jaffedream
链接:https://www.zhihu.com/question/51729819/answer/129509001
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

在靳伟大师代码的基础上,把【词语的分隔符】设为参数变量,应该完美了。

Public Function deduplicate(duplicateWords As String, sign As String)
    Dim result As String: Set dic = CreateObject("scripting.dictionary")
    If Len(sign) >= 1 Then
        Dim wArray As Variant: wArray = Split(duplicateWords, sign)
        For i = 0 To UBound(wArray): dic(Trim(wArray(i))) = ""
        Next
        For Each wItem In dic: result = result + sign + wItem
        Next
        deduplicate = Right(result, Len(result) - 1)
    ElseIf Len(sign) = 0 Then
        For i = 0 To Len(duplicateWords) - 1: dic(Trim(Mid(duplicateWords, i + 1, 1))) = ""
        Next
        For Each wItem In dic: result = result + sign + wItem
        Next
        deduplicate = result
    End If
End Function

调用函数时,传入【单元格和分隔符】,效果如下:

带分隔符效果

无分隔符效果

### Excel 中分组后将指定列合并到同一列显示的方法 在 Excel 数据处理中,如果希望对数据进行分组并将某些列的数据合并到同一列,则可以借助 `MELT` 函数的思想来完成这一操作。具体来说,可以通过以下方式实现: #### 使用 Power Query 进行列转换 Power Query 是一种强大的工具,能够帮助用户轻松地执行复杂的数据转换任务。通过 Power Query 的 UI 或 M 语言脚本,可以实现类似于 `melt` 的功能。 1. **加载数据至 Power Query** 首先,在 Excel 中选中目标表格区域,点击菜单栏上的 “数据” -> “获取和转换数据” -> “从表/范围”,将数据导入 Power Query 编辑器。 2. **展开列的操作** 在 Power Query 编辑器中,选择需要保留作为 ID 列的字段(即不参与熔化的列),然后右键单击其他要合并的列,选择 “取消折叠”。这一步骤会将多列数据转化为两列形式:一列为原列名,另一列为对应的值[^1]。 3. **调整输出格式** 完成上述步骤后,可以根据需求进一步筛选、排序或删除多余的辅助列。最后,点击左上角的 “关闭并加载” 按钮,将结果返回到工作簿中。 #### VBA 脚本自动化流程 对于熟悉编程的人来说,编写一段简单的宏代码也可以达到相同的效果。下面提供了一个基于 VBA 的解决方案示例: ```vba Sub MergeColumns() Dim ws As Worksheet, lastRow As Long, i As Long, j As Long Set ws = ThisWorkbook.Sheets(1) ' 修改为实际的工作表名称 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow If Not IsEmpty(ws.Cells(i, 1)) Then j = 2 Do While j <= ws.Columns.Count And Not IsEmpty(ws.Cells(1, j)) If ws.Cells(i, j) <> "" Then ws.Cells(i, 1).Value = ws.Cells(i, 1).Value & "," & ws.Cells(i, j).Value End If j = j + 1 Loop End If Next i End Sub ``` 此段程序遍历每一行,并把该行除首列外的所有非空白单元格的内容拼接到第一个单元格里去[^3]。 #### SQL 查询语句模拟效果 当涉及到数据库层面时,这种变换通常被称为“宽表转长表”的过程。假设原始数据存储在一个关系型数据库当中,那么利用标准 SQL 即可构建相应的查询逻辑。例如: ```sql SELECT id_column, column_name AS key_, value_ FROM your_table t UNPIVOT (value_ FOR column_name IN ([col_a], [col_b])) u; ``` 这里运用到了 `UNPIVOT` 子句,它允许我们将多个属性压缩进单一记录之中[^2]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值