利用收集數據時,如果事先沒有對數據錄入作出統一的規范性限制,就可能會收集到一些不統一的數據。
以上圖中C列的學校名稱為例,既有簡稱,也有全稱,而且各種簡稱的信息也不完全一致,面對這樣的表格,如果數據量很大,要在其基礎上進行數據查詢、數據分析之類的工作,名稱不統一的問題是一個較大的麻煩。
很多時候,可能需要通過公式或其他方法求兩個名稱的相似度,通過相似度的高低來判斷兩個名稱指的是否為同一個事件。
Excel中沒有現成的函數可以求兩個文本的相似度,我們可以使用來寫一個自定義函數幫助解決類似的問題:
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?IfEnd?Function
在Excel的VBE編輯器中新建一個模板,將以上代碼復制、粘貼到模塊中。
再回到Excel中,就能像使用普通函數一樣使用自定義函數求兩個文本的相似度了。
求得文本的相似度之后,根據自定義的標準,再借助其他函數,就能判斷兩個文本是否同一個內容,進行進行內容的修正了。