Excel精英培训网

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

[已解决]求助大神,帮忙看看问题出在哪?

[复制链接]
发表于 2017-3-30 20:56 | 显示全部楼层 |阅读模式
这段代码还是几年前在论坛里朋友帮助完成了,结果遇见了新问题。
请看附件。
1、验证平衡的时候,第7号凭证显示不平衡,但是明显是平衡的啊
2、5-6号凭证打印不出来,显示错误。

这个代码用两年多了,一直很好用,所以怀疑是不是数值超过上限了还是什么问题,求助大神!
最佳答案
2017-4-3 22:45
本帖最后由 raymanrrr 于 2017-4-4 07:18 编辑

立即窗口输入
?jf-df  得到了个
-4.65661287307739E-10
可见确实是不等的,具体原因我也想不出来为何两位数的double类型累加会产生一个0.000000000000000004的多余部分

第一个宏按我的风格重新写了下
Sub Pingheng()
    Dim jf As Double
    Dim df As Double
   
        For j = Cells(1, "L").Value To Cells(2, "L").Value
            jf = 0
            df = 0
            
            For i = 2 To Range("B65536").End(3).Row
                If Cells(i, "B").Value = j Then
                    jf = Cells(i, "G").Value + jf
                    df = Cells(i, "H").Value + df
                End If
            Next
            ‘round函数写在最后
            jf = Round(jf, 2)
            df = Round(df, 2)
            
            If Not jf = df Then
              MsgBox ("第" & j & "号凭证不平衡!")
              Exit Sub
            End If
        Next
        
          MsgBox ("所有凭证都平衡")
End Sub

打印那个说实在话我实在看吐了不想看了,总之把len(s)替换成len(round(s,0))应该就没问题了,你自己试试,试前记得备份下,查找替换记得在当前过程内进行

文件求助.rar

20.43 KB, 下载次数: 9

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-3-30 21:30 | 显示全部楼层
浮点计算不要精确比较,微软官方也有说明,误差是存在的。
可以将If JF <> DF Then改成If Abs(JF - DF) > 0.00001 Then诸如此类。
一般浮点运算出现的误差会远小于上面数字,所以不会影响判断。
回复

使用道具 举报

 楼主| 发表于 2017-3-30 23:12 | 显示全部楼层
大灰狼1976 发表于 2017-3-30 21:30
浮点计算不要精确比较,微软官方也有说明,误差是存在的。
可以将If JF  DF Then改成If Abs(JF - DF) > 0. ...

打印为什出错呢?
回复

使用道具 举报

 楼主| 发表于 2017-3-31 07:08 | 显示全部楼层
求大神帮忙啊!
回复

使用道具 举报

发表于 2017-3-31 08:49 | 显示全部楼层
不能打印其实你F8测试一下就知道,也是同样的原因,生成的数字小数点后面有一串.0000003,导致LEN()判断出错。
回复

使用道具 举报

 楼主| 发表于 2017-3-31 13:54 | 显示全部楼层
大神帮忙改一下啊,不知道怎么改
回复

使用道具 举报

 楼主| 发表于 2017-3-31 20:13 | 显示全部楼层
大灰狼1976 发表于 2017-3-31 08:49
不能打印其实你F8测试一下就知道,也是同样的原因,生成的数字小数点后面有一串.0000003,导致LEN()判断出 ...

大神  能帮忙解决一下问题吗,我用round函数四舍五入也没有解决问题,还是出现混乱。
求帮助
回复

使用道具 举报

 楼主| 发表于 2017-4-3 22:15 | 显示全部楼层
求助哪位大神帮忙改一下啊,我没辙了!求助
回复

使用道具 举报

发表于 2017-4-3 22:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 raymanrrr 于 2017-4-4 07:18 编辑

立即窗口输入
?jf-df  得到了个
-4.65661287307739E-10
可见确实是不等的,具体原因我也想不出来为何两位数的double类型累加会产生一个0.000000000000000004的多余部分

第一个宏按我的风格重新写了下
Sub Pingheng()
    Dim jf As Double
    Dim df As Double
   
        For j = Cells(1, "L").Value To Cells(2, "L").Value
            jf = 0
            df = 0
            
            For i = 2 To Range("B65536").End(3).Row
                If Cells(i, "B").Value = j Then
                    jf = Cells(i, "G").Value + jf
                    df = Cells(i, "H").Value + df
                End If
            Next
            ‘round函数写在最后
            jf = Round(jf, 2)
            df = Round(df, 2)
            
            If Not jf = df Then
              MsgBox ("第" & j & "号凭证不平衡!")
              Exit Sub
            End If
        Next
        
          MsgBox ("所有凭证都平衡")
End Sub

打印那个说实在话我实在看吐了不想看了,总之把len(s)替换成len(round(s,0))应该就没问题了,你自己试试,试前记得备份下,查找替换记得在当前过程内进行
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-15 11:02 , Processed in 0.273309 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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