快捷搜索:  汽车  科技

vba如何判断两个字符串含相同部分,ExcelVBA案例写一个自定义函数

vba如何判断两个字符串含相同部分,ExcelVBA案例写一个自定义函数关注“Excel笔记”,学最适用的Excel技巧。Function TextSame(ByVal Str1 As String ByVal Str2 As String) As Double '----------------------------------------------------------------- '说明: '1.函数返回的结果为一个0到1之间的小数,代表参数两个数据的想似度 '2.函数有两个参数,代表用来对比的两个数据 'QQ:4597716(微信同号),公众号:Excel笔记 '----------------------------------------------------------------- Application.Volatile Tru

利用Excel收集数据时,如果事先没有对数据录入作出统一的规范性限制,就可能会收集到一些不统一的数据。

vba如何判断两个字符串含相同部分,ExcelVBA案例写一个自定义函数(1)

以上图中C列的学校名称为例,既有简称,也有全称,而且各种简称的信息也不完全一致,面对这样的表格,如果数据量很大,要在其基础上进行数据查询、数据分析之类的工作,名称不统一的问题是一个较大的麻烦。

很多时候,可能需要通过公式或其他方法求两个名称的相似度,通过相似度的高低来判断两个名称指的是否为同一个事件。

Excel中没有现成的函数可以求两个文本的相似度,我们可以使用VBA来写一个自定义函数帮助解决类似的问题:

Function TextSame(ByVal Str1 As String ByVal Str2 As String) As Double '----------------------------------------------------------------- '说明: '1.函数返回的结果为一个0到1之间的小数,代表参数两个数据的想似度 '2.函数有两个参数,代表用来对比的两个数据 'QQ:4597716(微信同号),公众号:Excel笔记 '----------------------------------------------------------------- Application.Volatile True Dim LenStr1 As Long LenStr2 As Long n As Long LenStr1 = Len(Str1) LenStr2 = Len(Str2) n = 0 If LenStr1 >= LenStr2 Then For i = 1 To LenStr2 If (InStr(1 Str1 Mid(Str2 i 1))) > 0 Then n = n 1 End If Next TextSame = n / LenStr1 Else For i = 1 To LenStr1 If (InStr(1 Str2 Mid(Str1 i 1))) > 0 Then n = n 1 End If Next TextSame = n / LenStr2 End If End Function

在Excel的VBE编辑器中新建一个模板,将以上代码复制、粘贴到模块中。

vba如何判断两个字符串含相同部分,ExcelVBA案例写一个自定义函数(2)

再回到Excel中,就能像使用普通函数一样使用自定义函数求两个文本的相似度了。

vba如何判断两个字符串含相同部分,ExcelVBA案例写一个自定义函数(3)

求得文本的相似度之后,根据自定义的标准,再借助其他函数,就能判断两个文本是否同一个内容,进行进行内容的修正了。

关注“Excel笔记”,学最适用的Excel技巧。

猜您喜欢: