Excel精英培训网

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

[已解决]请教一个数据查找问题,谢谢

[复制链接]
发表于 2015-4-15 16:00 | 显示全部楼层 |阅读模式
坛子里的大师们,请教一下

功能描述:
  将数据1中的数字在数据2中找,如果数据2中没有这数字,那么提示:数据1的XX在数据2中未找到
  将数据2中的数字在数据1中找,如果数据1中没有这数字,那么提示:数据2的XX在数据1中未找到
  如果2边的数据都能在对方找到,提示:相等。
    谢谢!

QQ图片20150415155643.jpg


数据.zip (5.83 KB, 下载次数: 4)
发表于 2015-4-15 16:39 | 显示全部楼层
  1. Sub tt()
  2.     Dim d(1 To 2) As Object
  3.     Set d(1) = CreateObject("scripting.dictionary")
  4.     Set d(2) = CreateObject("scripting.dictionary")
  5.     arr = Range("a1:c" & [a65536].End(3).Row)
  6.     For i = 2 To UBound(arr)
  7.         For k = 1 To 2
  8.             x = arr(i, k)
  9.             xrr = Split(x, ",")
  10.             For m = 0 To UBound(xrr)
  11.                 d(k)(xrr(m)) = ""
  12.             Next
  13.         Next
  14.         s = ""
  15.         For Each xk In d(1).keys
  16.             If Not d(2).exists(xk) Then s = s & "," & "数据1的" & xk & "在数据2未找到"
  17.         Next
  18.         For Each xk In d(2).keys
  19.             If Not d(1).exists(xk) Then s = s & "," & "数据2的" & xk & "在数据1未找到"
  20.         Next
  21.         If s = "" Then s = ",相等"
  22.         arr(i, 3) = Mid(s, 2)
  23.         d(1).RemoveAll: d(2).RemoveAll
  24.     Next
  25.     [a7].Resize(UBound(arr), UBound(arr, 2)) = arr
  26. End Sub
复制代码

数据.rar

15.26 KB, 下载次数: 4

回复

使用道具 举报

发表于 2015-4-15 16:40 | 显示全部楼层
原数据里有个全角的逗号,需要改过来,不然结果有误。
回复

使用道具 举报

发表于 2015-4-15 16:52 | 显示全部楼层    本楼为最佳答案   
换个不用字典的思路,纯字符串比较
  1. Sub 不用字典()
  2.     arr = Range("a1:c" & [a65536].End(3).Row)
  3.     For i = 2 To UBound(arr)
  4.         s = ""
  5.         For k = 1 To 2
  6.             t = IIf(k = 1, 2, 1)
  7.             x = arr(i, k)
  8.             xrr = Split(x, ",")
  9.             For m = 0 To UBound(xrr)
  10.                 y = "," & xrr(m) & ","
  11.                 If InStr("," & arr(i, t) & ",", y) = 0 Then s = s & "," & "数据" & k & "的" & xrr(m) & "在数据" & t & "未找到"
  12.             Next
  13.         Next
  14.         If s = "" Then s = ",相等"
  15.         arr(i, 3) = Mid(s, 2)
  16.     Next
  17.     [a7].Resize(UBound(arr), UBound(arr, 2)) = arr
  18. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-4-15 17:05 | 显示全部楼层
grf1973 发表于 2015-4-15 16:52
换个不用字典的思路,纯字符串比较

谢谢,我刚使用split分开,放入数组里面,这样的话,就会出现一个问题,
比如: 源数据1的 27,数据2的527,这样就检测不出来了
回复

使用道具 举报

 楼主| 发表于 2015-4-15 17:27 | 显示全部楼层
grf1973 发表于 2015-4-15 16:52
换个不用字典的思路,纯字符串比较

使用前后加一个 “,”的方式完美解决,您的这个办法实用,谢谢指导
回复

使用道具 举报

发表于 2015-4-15 17:28 | 显示全部楼层
maysh2009 发表于 2015-4-15 17:05
谢谢,我刚使用split分开,放入数组里面,这样的话,就会出现一个问题,
比如: 源数据1的 27,数据2的5 ...

需要改写,比如原数据为1,2,3,22    需要将其改为,1,2,3,22,

Split之后的元素需要在两边加逗号",1,"  ",2,"  ",3,"   ",22,"
这样就能精确比较了
回复

使用道具 举报

 楼主| 发表于 2015-4-15 17:37 | 显示全部楼层
白开水的微笑 发表于 2015-4-15 17:28
需要改写,比如原数据为1,2,3,22    需要将其改为,1,2,3,22,

Split之后的元素需要在两边加逗号 ...

嗯嗯,我看到前面的回复,然后 照着这样的思路就成了,谢谢你们
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 02:29 , Processed in 0.775323 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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