利用收集數(shù)據(jù)時(shí),如果事先沒有對(duì)數(shù)據(jù)錄入作出統(tǒng)一的規(guī)范性限制,就可能會(huì)收集到一些不統(tǒng)一的數(shù)據(jù)。
以上圖中C列的學(xué)校名稱為例,既有簡(jiǎn)稱,也有全稱,而且各種簡(jiǎn)稱的信息也不完全一致,面對(duì)這樣的表格,如果數(shù)據(jù)量很大,要在其基礎(chǔ)上進(jìn)行數(shù)據(jù)查詢、數(shù)據(jù)分析之類的工作,名稱不統(tǒng)一的問題是一個(gè)較大的麻煩。
很多時(shí)候,可能需要通過公式或其他方法求兩個(gè)名稱的相似度,通過相似度的高低來判斷兩個(gè)名稱指的是否為同一個(gè)事件。
Excel中沒有現(xiàn)成的函數(shù)可以求兩個(gè)文本的相似度,我們可以使用來寫一個(gè)自定義函數(shù)幫助解決類似的問題:
Function?TextSame(ByVal?Str1?As?String,?ByVal?Str2?As?String)?As?Double????'—————————————————————–????'說明:????'1.函數(shù)返回的結(jié)果為一個(gè)0到1之間的小數(shù),代表參數(shù)兩個(gè)數(shù)據(jù)的想似度????'2.函數(shù)有兩個(gè)參數(shù),代表用來對(duì)比的兩個(gè)數(shù)據(jù)????'QQ:4597716(微信同號(hào)),公眾號(hào):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?IfEnd?Function
在Excel的VBE編輯器中新建一個(gè)模板,將以上代碼復(fù)制、粘貼到模塊中。
再回到Excel中,就能像使用普通函數(shù)一樣使用自定義函數(shù)求兩個(gè)文本的相似度了。
求得文本的相似度之后,根據(jù)自定義的標(biāo)準(zhǔn),再借助其他函數(shù),就能判斷兩個(gè)文本是否同一個(gè)內(nèi)容,進(jìn)行進(jìn)行內(nèi)容的修正了。

