ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: efttr55dyf

[已解决] 求老师帮写个VBA代码从多表中选择相同及不同数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-21 08:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chxw68 发表于 2017-10-20 22:52
仔细看了你的代码,修改了一会又修改成我上面的代码了。

谢谢你,我主要是想知道红字的部分,有什么毛病。
若是太烧脑,就勉为其难了。

TA的精华主题

TA的得分主题

发表于 2017-10-21 08:46 | 显示全部楼层
weiyingde 发表于 2017-10-21 08:43
谢谢你,我主要是想知道红字的部分,有什么毛病。
若是太烧脑,就勉为其难了。

算法和逻辑都有问题,没有多大修改价值。

TA的精华主题

TA的得分主题

发表于 2017-10-21 09:45 | 显示全部楼层
chxw68 发表于 2017-10-21 08:46
算法和逻辑都有问题,没有多大修改价值。

算法上的错误,经lzxdy指点,本人测试,已经明白,改为红字的部分
至于逻辑错误,我还是不明白。
                 If rn1 = rn2 Then
                    n = n + 1
                   m = 1 + Int((n - 1) / 8)   '----2
                    p = IIf(n Mod 8 = 0, 8, n Mod 8)
                    crr(m, p) = rn2
                    Set rng1 = Nothing
                    Set rng2 = Nothing
                 Else
                    d(rn1) = ""
                 end if

TA的精华主题

TA的得分主题

发表于 2017-10-21 15:42 | 显示全部楼层
weiyingde 发表于 2017-10-21 09:45
算法上的错误,经lzxdy指点,本人测试,已经明白,改为红字的部分
至于逻辑错误,我还是不明白。
      ...

这个判断在对重复和不重复的数字进行分类时是有问题的:
是因为前表中的数字和后表中每一格的数字都要要进行比较,后表有两格以上那么相等及不等必然出现,都会运行到d(rn1)="",这就导致字典中会加入前表中的所有数字,没有达到分类的目的。
如果在判断出相等即重复时,将字典中已添加的这个数剔除掉,并不再与剩余数字比较,字典中就不会有多余的了,从而达到对前表数字进行无重复无遗漏的二分。
可试将上面代码作如下修改分步运行来理解:
crr(m, p) = rn2
改为:
crr(m, p) = rn2
If d.exists(rn1) Then d.Remove rn1
Exit For

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-10-21 16:59 | 显示全部楼层
lzxdy 发表于 2017-10-21 15:42
这个判断在对重复和不重复的数字进行分类时是有问题的:
是因为前表中的数字和后表中每一格的数字都要要 ...

谢谢耐心指教。
测试时,不重复的数据还是不全。

TA的精华主题

TA的得分主题

发表于 2017-10-21 17:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

储老师,能否解释一下并注释一下以下代码:
          If Len(arr(x, y)) <> 0 Then
              If Not d.exists(arr(x, y)) Then
                Set d(arr(x, y)) = CreateObject("scripting.dictionary")
              End If
              d(arr(x, y))(i) = ""
            End If

TA的精华主题

TA的得分主题

发表于 2017-10-21 17:40 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-21 19:30 | 显示全部楼层
chxw68 发表于 2017-10-21 17:40
字典嵌套,用来判断是否重复。

chxw68老师您好,您的代码已经完整的解决了表1和表一类(共12表)中不重复数据的选择问题,但表甲一至表甲六中只是将表1和表一中不重复数据的按原表顺序填列出来,假如现在表甲一至表甲六中  选择出来 的不重复数据  要求按从小到大的顺序排列[则表甲一中选出数据将不按888        999 111排列    而应该按111 888 999来排   表甲三中679后面将不再填列013 026 034  而是应该将013 排列在009之后  026则排列在027前面]  chxw68老师如果要做到按重小到大的排列(填列),那么您的那个代码又要怎样修改呢?如果方便请修改,好得以一窥怎样“改变世界”。谢谢

]

TA的精华主题

TA的得分主题

发表于 2017-10-21 19:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
修改好了。

从多表中选择相同及不同数据.rar

19.38 KB, 下载次数: 34

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-21 21:51 | 显示全部楼层

谢谢chxw68老师弹指间“指点江山、激扬代码”,明日再来献花致谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 02:57 , Processed in 0.043127 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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