设为首页收藏本站|繁體中文

Excel 技巧网

QQ登录

只需一步,快速开始

手机号码,快捷登录

查看: 335|bwin官网地址: 10

[待分类提问] 求帮助,明明合计为零,但判断就是不对

[复制链接]
发表于 2019-3-25 16:53:00 | 显示全部楼层 |阅读模式

免费注册成为本站会员,享用更多功能,结识更多Office办公高手!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 snzym 于 2019-3-25 17:00 编辑

求帮助-.zip (38.08 KB, 下载次数: 8)
发表于 2019-3-29 21:36:19 | 显示全部楼层
?不解,合计为零什么意思
捕获.PNG
发表于 2019-3-31 15:19:24 | 显示全部楼层
51854.37
-35267.15
-54254.19
-287858.18
182065.29
143459.86
涂黄色的数据加起来本身就是零呀,应该是多少呢?
发表于 2019-3-31 15:58:54 | 显示全部楼层
ARR = Worksheets("δ??????").[i3].Resize(n, 3) '????
这个语句只能返回一个单元格范围(Range),好像你希望是返回一个数组吧
发表于 2019-3-31 16:29:13 | 显示全部楼层
请详细描述你希望的单元格内数据处理过程,下面这一段,没咋看懂,ARR这个数组是用来判断的么?
For i = 3 To UBound(ARR)
If d.exists(ARR(i - 2, 2)) And d1.exists(ARR(i - 2, 3)) Then
     If 0 = Application.WorksheetFunction.SumIfs(Range("i3:i65536"), Range("j3:j65536"), ARR(i - 2, 2), Range("k3:k65536"), "=" & ARR(i - 2, 3)) Then
       For k = 3 To n
        If ARR(i - 2, 2) = ARR(k - 2, 2) And ARR(i - 2, 3) = ARR(k - 2, 3) Then
        'MsgBox "???" '
        Range("i" & i).Font.ColorIndex = 3 'xlNone
        Range("i" & k).Font.ColorIndex = 3 'xlNone
        Else
        'MsgBox "??????"
        End If
       Next k
     
     
     Else
      'MsgBox "????"
     End If
'MsgBox "????"
End If
Next i

 楼主| 发表于 2019-4-4 10:04:04 | 显示全部楼层
判断:对于单位和日期相同的情况下,余额合计是否为零。
         如果为零余额列涉及的金额标红色。
我的问题跟小程序无关。小程序是没有问题的吧。
对于标黄色部分实际不为零,我认为是格式的问题。或者是其他的问题,我就不清楚了。为什么判断不为零呢?3-5行的余额就能判断为零。
 楼主| 发表于 2019-4-4 11:09:32 | 显示全部楼层
奇怪:i1单元格的值是i15至i19的合计数。为啥不等于零。

求帮助-1.zip

36.91 KB, 下载次数: 0

 楼主| 发表于 2019-4-4 11:36:46 | 显示全部楼层
好像是浮点运算的问题吗?
 楼主| 发表于 2019-4-4 14:10:35 | 显示全部楼层
自行解决了! 把这句If 0 = Abs(Application.WorksheetFunction.SumIfs(Range("i3:i65536"), Range("j3:j65536"), arr(i - 2, 2), Range("k3:k65536"), "=" & arr(i - 2, 3))) Then改成为
   If Abs(Application.WorksheetFunction.SumIfs(Range("i3:i65536"), Range("j3:j65536"), arr(i - 2, 2), Range("k3:k65536"), "=" & arr(i - 2, 3))) <= 0.00001 Then
OK!
 楼主| 发表于 2019-4-4 14:16:20 | 显示全部楼层
永远不要写 if x=y 这样的句子,因为很可能数学上相等的x和y,在计算机内部是不等的

应该写成 if |x-y| / max(|x|,|y|) <= 0.0000000000001 之类

或者简单一点,用if round(x) = round(y) 来判断,这样最末一位的尾数浮点存储误差就不会影响整个数值了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Excel技巧网的会员探讨问题仅代表其个人意见,与网站的立场无关。任何违反国家和地方相关法律法规的言论,本站有义务协助政府相关部门追究发言者的责任!
本站中非注明转载文章与案例的版权为作者与Excel技巧网共有。若非原文作者,本站之外任何单位或个人未经允许,不得将其用于商业用途。
若非原文作者,任何形式的非商业性转载必须获得Excel技巧网或作者允许,并注明作者和出处。
会员发表的帖子如涉及版权纠纷,须自行负责。详情请参考注册时的网站服务条款。
本站特聘法律顾问:沈学律师