Excel精英培训网

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

[已解决]求高手解答关于EXCEL中字符串求交集问题

[复制链接]
发表于 2014-4-9 14:52 | 显示全部楼层 |阅读模式
本帖最后由 sjz0 于 2014-4-9 16:03 编辑

A1= 01 02 03 04 09 12 22 88 93      -------------不大于100,
A2=01 04 22 67
A3中要求出A1与A2的交集,应该是01 04 22
怎么样才能求出?要用VBA才行吗?望大侠不吝赐教,多谢,多谢

本人菜鸟一名,最好能上传一下文件,多谢多谢。
最佳答案
2014-4-14 22:46
本帖最后由 香川群子 于 2014-4-14 22:57 编辑

一个自定义函数彻底解决。
包含k=0 补集 k=1 交集 k=2 并集 k=-1 差集 四种集合比较运算:

  1. Function jhys(A, B, Optional k = 1) '集合运算 的拼音首字母
  2.     'k=0 补集 k=1 交集 k=2 并集 k=-1 差集
  3.    
  4.     Dim c(99)
  5.     s = Split(A)
  6.     For i = 0 To UBound(s)
  7.         c(s(i)) = s(i)
  8.     Next
  9.    
  10.     s = Split(B)
  11.     If k = 0 Then '返回1-99的补集
  12.         For i = 0 To UBound(s)
  13.             c(s(i)) = s(i)
  14.         Next
  15.         For i = 1 To 99
  16.             If c(i) = 0 Then t = t & " " & Right(0 & i, 2)
  17.         Next
  18.     ElseIf k = 1 Then '返回AB交集(AB都含有)
  19.         For i = 0 To UBound(s)
  20.             If c(s(i)) Then t = t & " " & s(i)
  21.         Next
  22.     ElseIf k = 2 Then '返回AB并集(A或B含有)
  23.         For i = 0 To UBound(s)
  24.             c(s(i)) = s(i)
  25.         Next
  26.         For i = 1 To 99
  27.             If c(i) Then t = t & " " & Right(0 & i, 2)
  28.         Next
  29.     ElseIf k = -1 Then '返回A-B差集(A含B不含)
  30.         For i = 0 To UBound(s)
  31.             If c(s(i)) Then c(s(i)) = 0
  32.         Next
  33.         For i = 1 To 99
  34.             If c(i) Then t = t & " " & Right(0 & i, 2)
  35.         Next
  36.     End If
  37.     jhys = Mid(t, 2)
  38. End Function
复制代码

字串符求交疑惑.rar

6.11 KB, 下载次数: 11

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-4-9 15:28 | 显示全部楼层
  1. Sub marco()
  2. Dim c()
  3. a = Split([a1], " ")
  4. b = Split([a2], " ")
  5. For i = 0 To UBound(a)
  6.    For j = 0 To UBound(b)
  7.      If a(i) = b(j) Then
  8.         n = n + 1
  9.         ReDim Preserve c(1 To n)
  10.         c(n) = b(j)
  11.         GoTo 100
  12.     End If
  13.     Next j
  14. 100:
  15.     Next i
  16. [a3] = Join(c, " ")
  17. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-4-9 16:09 | 显示全部楼层
Ex_EP 发表于 2014-4-9 15:28

感谢您的代码,不过我太菜鸟,宏到是找的到,你的过程函数不知怎么用,贴子我又编辑了一下,加了附件
可否请您上传一下调好的文件?多谢,多谢!!
回复

使用道具 举报

发表于 2014-4-9 17:07 | 显示全部楼层
sjz0 发表于 2014-4-9 16:09
感谢您的代码,不过我太菜鸟,宏到是找的到,你的过程函数不知怎么用,贴子我又编辑了一下,加了附件
可 ...

利用自定义函数完成
322533-VBA-自定义函数-提取字串符交集.zip (13.39 KB, 下载次数: 15)
回复

使用道具 举报

发表于 2014-4-9 17:25 | 显示全部楼层
sjz0 发表于 2014-4-9 16:09
感谢您的代码,不过我太菜鸟,宏到是找的到,你的过程函数不知怎么用,贴子我又编辑了一下,加了附件
可 ...

你看看  

字串符求交疑惑.rar

16.45 KB, 下载次数: 12

回复

使用道具 举报

 楼主| 发表于 2014-4-9 23:00 | 显示全部楼层
问题解决,多谢,多谢
回复

使用道具 举报

 楼主| 发表于 2014-4-9 23:58 | 显示全部楼层
那么的帅 发表于 2014-4-9 17:07
利用自定义函数完成

老兄,多谢你的帮助。
代码中
a = Split(RNG(1), " ")
    b = Split(RNG(2), " ")

是不是限定了只有上下,两个单元格求交集?
如果我想任意的两个单元格求交集这个怎么改?
回复

使用道具 举报

发表于 2014-4-10 00:24 | 显示全部楼层
sjz0 发表于 2014-4-9 23:58
老兄,多谢你的帮助。
代码中
a = Split(RNG(1), " ")

322533-VBA-自定义函数-提取字串符交集-1.zip (13.47 KB, 下载次数: 22)
回复

使用道具 举报

 楼主| 发表于 2014-4-10 01:07 | 显示全部楼层
那么的帅 发表于 2014-4-10 00:24

完全正确,多向老兄
回复

使用道具 举报

 楼主| 发表于 2014-4-14 21:45 | 显示全部楼层
那么的帅 发表于 2014-4-10 00:24

老兄,多谢你写的交集公式。本来想拿你的公式改一下,写出差集与并集的公式,无耐我太笨。
写不出来,能否请您再帮写一下,多多感谢!!!

写出差集与并集.rar

12.85 KB, 下载次数: 11

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 13:59 , Processed in 0.208557 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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