wowow 发表于 2014-7-5 02:34

秋月风夏 发表于 2014-7-5 03:52

把所有格子合并了
table1
A1 B1 C1 D1
table2
A2 B2 C2 D2
那么都加一列
E1 = A1&B1&C1&D1
E2 = A2&B2&C2&D2
比较E列就好了

wowow 发表于 2014-7-5 06:26

nonmoi 发表于 2014-7-5 07:05

用if(and(exact(),exact(),....)...,...)
这样?

wowow 发表于 2014-7-5 07:08

SimonOpera 发表于 2014-7-5 10:11

捷径当然有啊,上vba直接用sql,select from,然后输出对比结果和行号
不要太简单

——— 来自Stage1st Reader For iOS

SimonOpera 发表于 2014-7-5 10:14

横向多列在vba做个循环咯

——— 来自Stage1st Reader For iOS

wowow 发表于 2014-7-5 19:19

semmy 发表于 2014-7-5 19:36

excel 匹配

紧那罗 发表于 2014-7-5 20:56

这要上最小编辑距离?
不知道excel有没有现成的函数

秋月风夏 发表于 2014-7-5 21:01

比较文本相似度是个非常麻烦的东西,建议用专门的东西弄

cxn 发表于 2014-7-5 21:23

本帖最后由 cxn 于 2014-7-5 21:26 编辑

wowow 发表于 2014-7-5 19:19
情况又变了。
如何对比两列文件的相似度?
主要是需要能够快速的对比出两列高度相似与高度错误。这种复杂公 ...
从原文中抽离数字部分,然后比较……没有现成的工作表函数,得自己写VBA代码,然后调用自己写的函数

闲的蛋疼,写了2个你看一下是否能用


Function abcd(rng As Range)
    '从文本中抽离数字部分
    abcd = "木有数字"
   
    Dim i%, s$, ss$
    s = rng.Text
    ss = ""
    For i = 1 To Len(s)
      If Mid(s, i, 1) Like "#" Then
            ss = ss & Mid(s, i, 1)
            abcd = ss
      End If
    Next
End Function

Function efg(rng1 As Range, rng2 As Range)
    '比较两段文本是否类似,即其中一段包含另外一段的内容
    efg = False
   
    If rng1.Text Like "*" & rng2.Text & "*" Or rng2.Text Like "*" & rng1.Text & "*" Then
      efg = True
    End If
End Function

wowow 发表于 2014-7-5 21:45

紧那罗 发表于 2014-7-5 22:03

不懂VBA...照着关键词搜到个现成的 试了下能用比较从文本A编辑到文本B需要的操作次数(增删改) 数字越小说明越相似(准确点是要再除以字符的长度?)
同义词之类就没办法了...Function Levenshtein(ByVal string1 As String, ByVal string2 As String) As Long

Dim i As Long, j As Long
Dim string1_length As Long
Dim string2_length As Long
Dim distance() As Long

string1_length = Len(string1)
string2_length = Len(string2)
ReDim distance(string1_length, string2_length)

For i = 0 To string1_length
    distance(i, 0) = i
Next

For j = 0 To string2_length
    distance(0, j) = j
Next

For i = 1 To string1_length
    For j = 1 To string2_length
      If Asc(Mid$(string1, i, 1)) = Asc(Mid$(string2, j, 1)) Then
            distance(i, j) = distance(i - 1, j - 1)
      Else
            distance(i, j) = Application.WorksheetFunction.Min _
            (distance(i - 1, j) + 1, _
             distance(i, j - 1) + 1, _
             distance(i - 1, j - 1) + 1)
      End If
    Next
Next

Levenshtein = distance(string1_length, string2_length)

End Function

jacyca103126 发表于 2014-7-5 22:08

excel记录大量数据的第一生死要务就是不要合并单元格,对我来说是死也要守住的铁则

wowow 发表于 2014-7-6 00:47

页: [1]
查看完整版本: (情况又变了)EXCEL如何对比两列资料的相似度?