当前位置:首页>java>【Excel VBA 编程】单元格内多行文本“拆”与“合”

【Excel VBA 编程】单元格内多行文本“拆”与“合”

  • 2026-10-21 13:27:18
【Excel VBA 编程】单元格内多行文本“拆”与“合”
“案例分享:统计Excel内两列文本差异”

总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!

效果展示

在Excel中,B列数据是A列数据的子集,要求快速找出A列中存在而B列中不存在的差异项,如下图所示

这是一个涉及单元格内多行文本处理和集合差异比对的复合需求,即两个文本数据进行一个减法操作,将A列多出来的内容输出到C列,最终显示格式及结果:

代码及实现步骤

请按照以下步骤操作:

  • 复制并粘贴代码:将提供的VBA代码复制,然后在Excel的VBA编辑器里,新建一个“标准模块”,把代码粘贴进去

  • 选择工作表:回到Excel工作表界面,用鼠标点击左下角的工作表名称,打开想要处理的工作表,即为当前活动工作表(ActiveSheet)

  • 运行代码:最后,按F5执行刚才粘贴好的宏代码,它只会对当前活动工作表的数据进行处理

代码参考

Sub GetDiffItems()    Dim ws As Worksheet    Dim lastRow As Long, i As Long, j As Long, diffCount As Long    Dim arrA() As String, arrB() As String, diffItems() As String, resultStr As String    Dim dict As Object    Set ws = ActiveSheet '默认当前活动工作表    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row    '创建字典对象用于快速查找    Set dict = CreateObject("Scripting.Dictionary")    ' 循环遍历每一行    For i = 1 To lastRow        ' 清空字典,为每一行独立的比对做准备        dict.RemoveAll        ' 获取并拆分B列单元格内容(处理空单元格)        If Len(Trim(ws.Cells(i, "B").Value)) > 0 Then            arrB = Split(ws.Cells(i, "B").Value, Chr(10))            For j = LBound(arrB) To UBound(arrB)                dict(Trim(arrB(j))) = True            Next j        Else            ' 如果B列为空,则清空数组            Erase arrB        End If        ' 获取并拆分A列单元格内容,同时查找差异        diffCount = 0        Erase diffItems ' 清空差异数组        If Len(Trim(ws.Cells(i, "A").Value)) > 0 Then            arrA = Split(ws.Cells(i, "A").Value, Chr(10))            ' 遍历A列的每一个元素            For j = LBound(arrA) To UBound(arrA)                Dim currentItem As String                currentItem = Trim(arrA(j))                ' 如果当前元素不在字典中(即不在B列),则加入差异数组                If Len(currentItem) > 0 And Not dict.exists(currentItem) Then                    ' 动态扩展差异数组                    ReDim Preserve diffItems(diffCount)                    diffItems(diffCount) = currentItem                    diffCount = diffCount + 1                End If            Next j        End If        ' 将差异数组组合成字符串,写入C列        If diffCount > 0 Then            resultStr = Join(diffItems, Chr(10))        Else            resultStr = "" ' 如果没有差异,则输出空        End If        ws.Cells(i, "C").Value = resultStr    Next i    ' 清理对象并提示完成    Set dict = Nothing    MsgBox "完成!结果输出到C列"End Sub

实现思路:将单元格内的多行文本拆分成独立的字符串数组,并将B列拆分后的所有元素存入数据字典,最后通过数据字典快速地核对差异

涉及到的编程知识:

  • 数据结构:数组、字典Dictionary

  • 处理字符串的内置函数:Split、Join

 感兴趣的朋友可以多加练习!好了,今天的内容到此结束了,下期继续

公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号,解锁更多的VBA技能

最新文章

随机文章