找回密码
 立即注册
搜索
查看: 3822|回复: 15

[软件] (情况又变了)EXCEL如何对比两列资料的相似度?

[复制链接]
头像被屏蔽
     
发表于 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列就好了
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2014-7-5 06:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2014-7-5 07:05 | 显示全部楼层
用if(and(exact(),exact(),....)...,...)
这样?
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2014-7-5 07:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2014-7-5 10:11 | 显示全部楼层
捷径当然有啊,上vba直接用sql,select from,然后输出对比结果和行号
不要太简单

——— 来自Stage1st Reader For iOS
回复

使用道具 举报

     
发表于 2014-7-5 10:14 | 显示全部楼层
横向多列在vba做个循环咯

——— 来自Stage1st Reader For iOS
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2014-7-5 19:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2014-7-5 19:36 | 显示全部楼层
excel 匹配
回复

使用道具 举报

     
发表于 2014-7-5 20:56 | 显示全部楼层
这要上最小编辑距离?
不知道excel有没有现成的函数
回复

使用道具 举报

发表于 2014-7-5 21:01 | 显示全部楼层
比较文本相似度是个非常麻烦的东西,建议用专门的东西弄
回复

使用道具 举报

     
发表于 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
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2014-7-5 21:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

  2. Dim i As Long, j As Long
  3. Dim string1_length As Long
  4. Dim string2_length As Long
  5. Dim distance() As Long

  6. string1_length = Len(string1)
  7. string2_length = Len(string2)
  8. ReDim distance(string1_length, string2_length)

  9. For i = 0 To string1_length
  10.     distance(i, 0) = i
  11. Next

  12. For j = 0 To string2_length
  13.     distance(0, j) = j
  14. Next

  15. For i = 1 To string1_length
  16.     For j = 1 To string2_length
  17.         If Asc(Mid$(string1, i, 1)) = Asc(Mid$(string2, j, 1)) Then
  18.             distance(i, j) = distance(i - 1, j - 1)
  19.         Else
  20.             distance(i, j) = Application.WorksheetFunction.Min _
  21.             (distance(i - 1, j) + 1, _
  22.              distance(i, j - 1) + 1, _
  23.              distance(i - 1, j - 1) + 1)
  24.         End If
  25.     Next
  26. Next

  27. Levenshtein = distance(string1_length, string2_length)

  28. End Function
复制代码
回复

使用道具 举报

     
发表于 2014-7-5 22:08 | 显示全部楼层
excel记录大量数据的第一生死要务就是不要合并单元格,对我来说是死也要守住的铁则
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2014-7-6 00:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2026-3-21 09:17 , Processed in 0.119960 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表