Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2807|回复: 8

[已解决]如何提取相同数值?

[复制链接]
发表于 2016-4-20 10:29 | 显示全部楼层 |阅读模式
本帖最后由 zhouxingyu 于 2016-4-20 12:15 编辑

哪位老师帮忙看看:
如何用用代码提取相同数值,(如果方便的话也提取不同数值)
用公式似乎无法解决,不知用vba可否?详见附件.十分感谢!
提取相同数值.zip (8.26 KB, 下载次数: 26)

提取相同数值.zip

7.82 KB, 下载次数: 34

发表于 2016-4-20 11:27 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-4-20 11:32 | 显示全部楼层
爱疯 发表于 2016-4-20 11:27
看不懂题意

完了,爱版看不懂.
回复

使用道具 举报

发表于 2016-4-20 11:39 | 显示全部楼层
zhouxingyu 发表于 2016-4-20 11:32
完了,爱版看不懂.

我看不看的懂,一点儿也不重要。
重要的是,大家能否看懂。


建议:比如可用文件简单说明一下,
结果1是如何如何得到的。
结果2是如何如何得到的。


回复

使用道具 举报

 楼主| 发表于 2016-4-20 12:00 | 显示全部楼层
爱疯 发表于 2016-4-20 11:39
我看不看的懂,一点儿也不重要。
重要的是,大家能否看懂。

说的是,我再完善一下.
回复

使用道具 举报

 楼主| 发表于 2016-4-20 12:18 | 显示全部楼层
已重新编辑,不知表述明白了没有.
回复

使用道具 举报

发表于 2016-4-20 14:15 | 显示全部楼层    本楼为最佳答案   
看懂了,感觉比较难。凑了一个,结果和模拟结果略有不同。
  1. Dim xs
  2. Sub tq()
  3.     Set d = CreateObject("scripting.dictionary")
  4.     arr = Range("h1:k" & [h65536].End(3).Row)
  5.     For i = 2 To UBound(arr) - 1
  6.         x = arr(i, 1)
  7.         For j = i + 1 To UBound(arr)
  8.             y = arr(j, 1)
  9.             If ISOK(x, y) Then
  10.                 xrr = Split(xs, ",")
  11.                 If arr(i, 2) = "" Then arr(i, 2) = xrr(0): arr(i, 3) = xrr(1): arr(i, 4) = y
  12.                 If arr(j, 2) = "" Then arr(j, 2) = xrr(0): arr(j, 3) = xrr(2): arr(j, 4) = x
  13.             End If
  14.         Next
  15.     Next
  16.     [L1].Resize(UBound(arr), 4) = arr
  17. End Sub

  18. Function ISOK(a, b) As Boolean      '是否相似,并返回x,y的相似数xs
  19.     xs = ""
  20.     x = a: y = b
  21.     For i = 1 To Len(x)
  22.         p = Mid(x, i, 1)
  23.         For j = 1 To Len(y)
  24.             If Mid(y, j, 1) = p Then
  25.                 xs = xs & p
  26.                 Mid(y, j, 1) = "A"
  27.                 Mid(x, i, 1) = "A"
  28.                 Exit For
  29.             End If
  30.         Next
  31.     Next
  32.     If Len(xs) = 5 Then
  33.         ISOK = True
  34.         xs = Replace(xs & "," & x & "," & y, "A", "")     'Like  "T5689,3,7",第一位为相似数,第二位为第一个不同数,第三位为第二个不同数
  35.     End If
  36. End Function
复制代码

提取相同数值.rar

14.65 KB, 下载次数: 21

评分

参与人数 1 +3 收起 理由
zhouxingyu + 3 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-4-20 15:59 | 显示全部楼层
grf1973 发表于 2016-4-20 14:15
看懂了,感觉比较难。凑了一个,结果和模拟结果略有不同。

非常不错了.这题是相当的难,已经明确用公式是无法解决的.
没想到让你这位大神给搞定了,十万分的佩服,十二万分的感谢!
回复

使用道具 举报

 楼主| 发表于 2016-4-20 17:20 | 显示全部楼层
看下载量不少.这道难题如还有其它解决方法,老师们不妨拿出来分享,我可以再开新贴给最佳.
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 06:07 , Processed in 0.398472 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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