You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel中为唯一水果列添加对应去重动物列表的实现方法

Excel中为唯一水果列添加对应去重动物列表的实现方法

嗨,我来给你分享几种实用的解决办法,优先满足你不想用VBA的需求,实在需要的话也给你准备了简单的脚本方案~

方法一:用Excel 365/2021自带函数(无VBA,最便捷)

如果你的Excel是365或者2021版本,直接用TEXTJOIN+UNIQUE+FILTER组合公式就能搞定,步骤超简单:

  • 假设你的原始数据在A2:B7区域(A列是Fruit,B列是Animal),唯一水果表在D2:D4区域(D列是Fruit)
  • 在E2单元格(对应第一个水果的Animals列)输入公式:
    =TEXTJOIN(", ", TRUE, UNIQUE(FILTER($B$2:$B$7, $A$2:$A$7=D2)))
    
  • 输入完按回车,然后下拉填充E列剩下的单元格就好啦!

公式拆解:

  • FILTER($B$2:$B$7, $A$2:$A$7=D2):先把当前水果对应的所有动物筛选出来
  • UNIQUE(...):给筛选出来的动物去重
  • TEXTJOIN(", ", TRUE, ...):用逗号加空格把去重后的动物连成一串,TRUE用来忽略空值

方法二:用Power Query(兼容旧版Excel,无VBA)

要是你用的是旧版Excel(没有上面的新函数),Power Query是个绝佳选择,操作可视化,还能重复使用:

  1. 选中你的原始数据区域,点击「数据」选项卡→「从表格/区域」(Excel 2016及以后版本;旧版找「获取和转换数据」里的「自表格」),弹出的对话框勾选「我的表格有标题」,进入Power Query编辑器
  2. 在编辑器里选中Fruit列,点击「转换」选项卡→「分组依据」:
    • 分组列选「Fruit」
    • 新列名填「Animals」
    • 操作选「所有行」,然后点击确定
  3. 此时Animals列是嵌套表,点击列名右侧的展开箭头,选择「提取值」,分隔符选「, 」(逗号加空格),确定
  4. 现在表格已经是水果对应去重后的动物列表了,点击「主页」→「关闭并上载」,选择上载到你想要的位置(比如替换原来的唯一水果表,或者新工作表)

方法三:VBA脚本(万不得已时用)

如果上面两种方法都不适用,给你准备了个简单的VBA脚本,操作步骤:

  1. 按Alt+F11打开VBA编辑器
  2. 右键你的工作簿→「插入」→「模块」,把下面的代码粘贴进去
  3. 回到Excel界面,按Alt+F8选择GetUniqueAnimals宏执行即可
Sub GetUniqueAnimals()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long, j As Long
    Dim fruitDict As Object
    Set fruitDict = CreateObject("Scripting.Dictionary")
    
    ' 改成你实际的工作表,比如Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set ws = ThisWorkbook.ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历原始数据,用字典存每个水果的唯一动物
    For i = 2 To lastRow
        Dim currentFruit As String, currentAnimal As String
        currentFruit = ws.Cells(i, "A").Value
        currentAnimal = ws.Cells(i, "B").Value
        
        If Not fruitDict.Exists(currentFruit) Then
            fruitDict(currentFruit) = currentAnimal
        Else
            ' 检查动物是否已存在,避免重复添加
            If InStr(1, fruitDict(currentFruit), currentAnimal, vbTextCompare) = 0 Then
                fruitDict(currentFruit) = fruitDict(currentFruit) & ", " & currentAnimal
            End If
        End If
    Next i
    
    ' 将结果写入目标列(假设目标水果列在D列,结果写在E列)
    lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
    For i = 2 To lastRow
        currentFruit = ws.Cells(i, "D").Value
        If fruitDict.Exists(currentFruit) Then
            ws.Cells(i, "E").Value = fruitDict(currentFruit)
        End If
    Next i
End Sub

备注:内容来源于stack exchange,提问作者Charles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:47:59