Excel精英培训网

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

[已解决]一段简单代码运行过程中总出错

[复制链接]
发表于 2014-6-12 11:50 | 显示全部楼层 |阅读模式
20学分
本帖最后由 969341591 于 2014-6-12 15:44 编辑

对库存表设置了一个极端情况就是用移动加权平均法计算发出重量时,若分母为零怎样来消错?尝试用if但总显示溢出,不知原因.望帮助.另外还有就是在程序运行过程中把计算出的零值消为空.

abc.gif 求助.rar (11.9 KB, 下载次数: 6)

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-6-12 12:28 | 显示全部楼层
先判断除数是否为0,不为0再继续。
回复

使用道具 举报

发表于 2014-6-12 12:30 | 显示全部楼层
  1. Sub jb()
  2.     'On Error Resume Next
  3.     Dim a%, b%, i%, j%
  4.     a = Cells(Rows.Count, 1).End(xlUp).Row
  5.     b = Cells(4, Columns.Count).End(xlToLeft).Column
  6.     For i = 5 To a
  7.         For j = 12 To b Step 4
  8.             a1 = a1 + Cells(i, j)
  9.             a2 = a2 + Cells(i, j + 1)
  10.             a3 = a3 + Cells(i, j + 2)
  11.             If a3 = 0 Then
  12.                 Cells(i, j + 3) = ""
  13.             ElseIf (a1 + Range("d" & i)) Then
  14.                 Cells(i, j + 3) = Round((a2 + Range("e" & i)) * Cells(i, j + 2) / (a1 + Range("d" & i)), 2)
  15.             End If
  16.             a4 = a4 + Cells(i, j + 3)
  17.             Range("f" & i) = a1
  18.             Range("g" & i) = a2
  19.             Range("h" & i) = a3
  20.             Range("i" & i) = a4
  21.             Range("j" & i) = Range("d" & i) + a1 - a3
  22.             Range("k" & i) = Range("e" & i) + a2 - a4
  23.         Next j
  24.         a1 = 0: a2 = 0: a3 = 0: a4 = 0
  25.     Next i
  26.     Range("e3") = Application.Subtotal(109, Range(Cells(5, 5), Cells(a, 5)))
  27.     Range("g3") = Application.Subtotal(109, Range(Cells(5, 7), Cells(a, 7)))
  28.     Range("i3") = Application.Subtotal(109, Range(Cells(5, 9), Cells(a, 9)))
  29.     Range("k3") = Application.Subtotal(109, Range(Cells(5, 11), Cells(a, 11)))
  30. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-6-12 12:34 | 显示全部楼层
本帖最后由 969341591 于 2014-6-12 12:41 编辑

为什么我用
         ElseIf VBA.IsError(Round((a2 + Range("e" & i)) * Cells(i, j + 2) / (a1 + Range("d" & i)), 2)) Then
         Cells(i, j + 3) = ""
来判断整个式子要是错误值程序就会出错,这其中同样含有除数为零呀?就是这儿不明白望详解.

回复

使用道具 举报

发表于 2014-6-12 12:37 | 显示全部楼层
那一句判断改为:
               If a3 = 0 Or a1 + Range("d" & i).Value = 0 Then                Cells(i, j + 3) = ""



程序最后加上:
    Dim rng As Range    For Each rng In Range(Cells(5, "A"), Cells(a, b))
        If rng.Value = 0 Then rng.Value = ""
    Next
回复

使用道具 举报

 楼主| 发表于 2014-6-12 12:42 | 显示全部楼层
ghostjiao 发表于 2014-6-12 12:37
那一句判断改为:
               If a3 = 0 Or a1 + Range("d" & i).Value = 0 Then                Cell ...

通过FOR  each循环来把单元格消空很慢
回复

使用道具 举报

 楼主| 发表于 2014-6-12 12:53 | 显示全部楼层
hwc2ycy 发表于 2014-6-12 12:30

我很想知道我用if iserror为什么会出错?求你了.
回复

使用道具 举报

 楼主| 发表于 2014-6-12 12:56 | 显示全部楼层
ghostjiao 发表于 2014-6-12 12:37
那一句判断改为:
               If a3 = 0 Or a1 + Range("d" & i).Value = 0 Then                Cell ...

为什么我用
ElseIf VBA.IsError(Round((a2 + Range("e" & i)) * Cells(i, j + 2) / (a1 + Range("d" & i)), 2)) Then
         Cells(i, j + 3) = ""
这句会出错?很想知道缘由.求你详解一下.
回复

使用道具 举报

发表于 2014-6-12 12:59 | 显示全部楼层
有点象我小时候写的代码,关于第一个问题:“VBA.IsError(........)”就是处理分母为零的;关于第二个问题:可在next i 的后面加判断试试
回复

使用道具 举报

 楼主| 发表于 2014-6-12 13:24 | 显示全部楼层
本帖最后由 969341591 于 2014-6-12 13:31 编辑
pengyx 发表于 2014-6-12 12:59
有点象我小时候写的代码,关于第一个问题:“VBA.IsError(........)”就是处理分母为零的;关于第二个问题: ...


是的,你小时候写的代码我弄了几十年还没完全弄清,现在,你在我心中的形象是特别的高大,真的没说假话我是你实实在在的fans。我现在很想知道为什么这句:“VBA.IsError(........)",会显示溢出、程序出错.我就是查不出来缘故.还有就是消零为空的问题,非常感谢您过去所做的.,
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 05:13 , Processed in 0.629416 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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