ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

如何匹配正负合计为0的数,最好用宏,公式,写得出来也可以

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-6-14 16:43 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我是个财务,左边有一列数列(因举例,所以只举了那么一点数),我想清走正负为0的数,用函数公式写到我头都痛,都没有头绪。看来只能用宏来实现了,但我又不懂宏。。。。
条件描述:
1.左边数列正负为0的组合基本上该有的情况都有,如1对1正负为0、1对多个合计正负为0、多个对多个合计正负为0
2.测试结果正负合计为0的数在对应的C列标记Y,其余没有匹配的在对应的c列显示为空;或者正负匹配为0的这些数,显示底色为红色。
3.编宏时候应该该宏检测的数据为b整列。




谢谢~~~~~对大侠们来说,应该是小菜一碟~

该宏如何编写.rar

2.18 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2011-6-14 16:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一对多,有点异想天开了!

TA的精华主题

TA的得分主题

发表于 2011-6-14 17:16 | 显示全部楼层
1 对 1 肯定简单的,按顺序从上到下一个一个配对就OK啦。

如果是1对多,那么请先明确次序规则:
1 对1 优先,还是顺序优先?

即,如果从上到下,有个数字 9,它应该先和最最后面的-9配对呢?
还是应该按顺序,先和 -2 、-3 、-4这三个数配对呢?

如果是-2 、-3 、-9、-4这样的顺序出现,应该先配对 -9呢?
还是应该优先配对: -2、-3、-4呢?


这个要请楼主明确。否则无法操作。


多对多,也存在同样的问题。
而且更加复杂。

比如,是几个先出现的正数和负数配对呢?
还是正数、负数交替出现也可以?


最后,为了简化计算量,多对多时,需要限制最多配对数。

否则,如果你的B列中数据有几十行的话,
这个计算量就已经可以让你的电脑死机了。

TA的精华主题

TA的得分主题

发表于 2011-6-14 17:18 | 显示全部楼层
最后,多余的一句,已经配对完成的,当然就不参加剩余数的配对了吧。


希望楼主把你要这样做的理由和目的,再稍加解释。

否则,难以帮到你。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-14 18:10 | 显示全部楼层
理由?erp中存在数据因为已经匹配,为了管理方便,把all item里面可以clear的data,清理至cleared item,剩下的就是open item。

其实这个东西我已早就知道是用公式出不来的,就算出来了,机器也承受不起。把这个贴放在这,其实就是避免漏了 excel公式版里的大侠。这个帖子我已在 vba版块里同时发过了。

其实假如可以实现的话,顺序您可以决定,我希望反馈的结果是正负为0的有个标记。

TA的精华主题

TA的得分主题

发表于 2011-6-15 20:30 | 显示全部楼层
原帖由 lomen222 于 2011-6-14 18:10 发表
理由?erp中存在数据因为已经匹配,为了管理方便,把all item里面可以clear的data,清理至cleared item,剩下的就是open item。

其实这个东西我已早就知道是用公式出不来的,就算出来了,机器也承受不起。把这个贴 ...


楼主你好。

第一步,用vba做了个一对一注释的按钮。

使用字典核对功能,遍历,并反复遍历直至结果无变化时停止。

顺便做了个清除注释,恢复数据原状的按钮。
  1. Sub test()
  2.     Dim d
  3.     Set d = CreateObject("Scripting.Dictionary") '定义字典
  4.    
  5.     n = [b1].End(4).Row - 1
  6.     [a1] = "No"
  7.     [a2].Resize(n, 1) = "=row()-1"
  8.     [a2].Resize(n, 1).Value = [a2].Resize(n, 1).Value 'A列中写入自然序号
  9.     [c1] = "注释"
  10.     a = [a2].Resize(n, 3) '读入数据到数组a中。
  11.    
  12. Chk: '反复检查核对。
  13.     For i = 1 To n
  14.         If a(i, 3) = "" And Not d.exists(a(i, 2)) Then '如果注释为空,且到目前为止该值尚未加入字典时(即无重复值时)
  15.             If Not d.exists(-a(i, 2)) Then '并且如果字典中到目前为止也没有相反数存在时,
  16.                 d.Add a(i, 2), i '符合上述条件则可加入字典作为新元素,并且该字典键值注释为行号值。
  17.             Else '如果已知字典中已经存在相反数,则:
  18.                 c = c + 1 '注释序号+1
  19.                 a(i, 3) = "1对1#" & c '当前值添加1对1注释
  20.                 a(d(-a(i, 2)), 3) = "1对1#" & c '已存在的相反数也添加1对1注释
  21.                 d.Remove (-a(i, 2)) '从字典中移除该相反数
  22.             End If
  23.         End If
  24.     Next
  25.     If k < c Then k = c: GoTo Chk '检查比对成功注释次数是否有增加,如果有增加则可能有相同数未全部检查,回到前面再次遍历
  26.     [a2].Resize(n, 3) = a '如果比对次数没有增加,则表明上一次检查已经无新增1对1成功配对,可以结束遍历检查。
  27.    
  28.     [a1].CurrentRegion.Sort Key1:=[c2], Header:=xlYes '按注释顺序排序。
  29. End Sub
复制代码
请看附件效果。

核对.rar

9.81 KB, 下载次数: 41

TA的精华主题

TA的得分主题

发表于 2024-5-31 10:52 | 显示全部楼层
香川群子 发表于 2011-6-15 20:30
楼主你好。

第一步,用vba做了个一对一注释的按钮。

这只能找出一对一吗,能找出多对多吗
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 04:41 , Processed in 0.035724 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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