百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Excel VBA案例,写一个自定义函数,判断两个字符串的相似度

wptr33 2024-12-09 18:00 27 浏览

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

以上图中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编辑器中新建一个模板,将以上代码复制、粘贴到模块中。

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


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

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

相关推荐

C++选择结构,让程序自动进行决策

什么是选择结构?正常的程序都是从上至下顺序执行,这就是顺序结构...

C++特性使用建议

1.引用参数使用引用替代指针且所有不变的引用参数必须加上const。在C语言中,如果函数需要修改变量的值,参数必须为指针,如...

C++程序员学习Zig指南(中篇)

1.复合数据类型结构体与方法的对比C++类:...

研一自学C++啃得动吗?

研一自学C++啃得动吗?在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C++的资料从专业入门到高级教程」,点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!个人...

C++关键字介绍

下表列出了C++中的常用关键字,这些关键字不能作为变量名或其他标识符名称。1、autoC++11的auto用于表示变量的自动类型推断。即在声明变量的时候,根据变量初始值的类型自动为此变量选择匹配的...

Python 3.10 结构模式匹配(Match Case)

Python3.10结构模式匹配(MatchCase)...

如何使用C++开发CDR的CPG插件?

在正式介绍C++的CDR插件开发技术之前,咱们先来了解一下什么是CPG(CorelPlugin)插件,即Corel插件。CPG插件是什么CDR软件提供了插件机制,CPG插件就是其中的一种,另外还有...

C/C++关键字之case

case关键字用在switch语句中,表示多条件语句的一个分支入口。C++本着高效原则,在编译器为每个分支生成代码时,不会生成相应的跳转代码跳出当前分支,除非程序员显式的使用break语句。这样,C/...

塞尔达工业革命卷到数字电路!网友:怕不是要在Switch里造Switch

明敏鱼羊发自凹非寺量子位|公众号QbitAI《塞尔达传说:王国之泪》发布一周多,懂物理的和不懂物理的都沉默了。...

一起学习C++:1.万字长文带你快速入门C++

前言在正式学习C++之前,有必要快速介绍下C++的基础语法。本文首先介绍一些计算机编程常见术语,然后逐行剖析解释代码含义并适当拓展其他相关知识(初学者不必深究,熟悉术语,了解知识全貌即可,未来会一步一...

C++基础知识总结(超详细总结)

C++基础1C++特点C++在C语言基础上引入了面对对象的机制,同时也兼容C语言。C++有三大特性...

用C实现协程库

协程这个东西有一段时间非常火热,特别是Go出来以后,大家都觉得这个用户态线程技术解决了很多问题,甚至用它可以支撑8亿用户,于是大家纷纷写了C/C++的协程库。实际上,我觉得协程库和支撑多少用户关系不大...

盘点c++几种常见的设计模式及具体实现

1.单例模式作用:保证一个类只有一个实例,并提供一个访问它的全局访问点,使得系统中只有唯一的一个对象实例。...

怎样才算学会了C++基础,一篇文章学习了解(包含Qt内容)

内容:C++、STL、数据结构、TCP/IP、数据库、linux、QtC++的基础(推荐两本书C++primer和C++primerplus)语法部分...

CCF 编程能力认证 C++ 一级宝典

CCF编程能力等级认证(以下简称GESP)每年四次认证时间分别为:3月、6月、9月2、12月,认证方式为线下机考,认证语言包括:C++、Python和Scratch三种语言,其中Scratch认证为一...