Excel精英培训网

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

[已解决]VBA 编码计算请高手帮忙

[复制链接]
发表于 2013-4-24 22:31 | 显示全部楼层 |阅读模式

如下编码倒数第二个"elseif"语句(涂黄颜色部分)对应的程序运行不起来,一直没有找到原因, 求高手帮忙指点, 谢谢!
如附件表格样本.
  1. Sub 提货率()
  2. Dim a As Integer, b As Integer, c As Integer, i As Integer, j As Long
  3. For i = 2 To Range("A1048576").End(xlUp).Row
  4. a = Val(Range("AC" & i)) - Val(Range("A" & i))
  5. b = Val(Range("AE" & i)) - Val(Range("T" & i))
  6. c = Val(Range("AD" & i)) - Val(Range("B" & i))
  7. If a = 0 Then
  8. If b = 0 Then
  9. Range("AJ" & i) = c & "Z"
  10. ElseIf b > 0 Then
  11. Range("Aj" & i) = c & "Z"
  12. Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "over delivery"
  13. ElseIf b < 0 Then
  14. Range("Aj" & i) = c & "Z"
  15. Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "short delivery"
  16. <FONT style="BACKGROUND-COLOR: yellow">ElseIf b = -Val(Range("T" & i)) Then '当"AE"&i列-"T"&i列 值为 负"T"&i 值时, 或"AE"&i 列值为0时
  17. Range("Aj" & i) = 4 - Val(Range("T" & i)) & "Z or more" ' 列"AJ"&i 值为"4 - Val(Range("T" & i)) & "Z or more"
  18. </FONT>End If
  19. ElseIf a > 0 Then
  20. Range("AJ" & i) = 12 + c & "Z"
  21. End If
  22. Next i
  23. End Sub

复制代码
最佳答案
2013-4-24 22:46
BrianBrian 发表于 2013-4-24 22:34
ElseIf b = -Val(Range("T" & i)) Then '当"AE"&i列-"T"&i列 值为 负"T"&i 值时, 或"AE"&i 列值为0时

Ra ...

应该是 判断顺序的问题
  1. Sub 提货率()
  2.     Dim a As Integer, b As Integer, c As Integer, i As Integer, j As Long
  3.     For i = 2 To Range("A1048576").End(xlUp).Row
  4.         a = Val(Range("AC" & i)) - Val(Range("A" & i))
  5.         b = Val(Range("AE" & i)) - Val(Range("T" & i))
  6.         c = Val(Range("AD" & i)) - Val(Range("B" & i))
  7.         If b = -Val(Range("T" & i)) Or Val(Range("AE" & i)) = 0 Then   '当"AE"&i列-"T"&i列 值为 负"T"&i 值时, 或"AE"&i 列值为0时
  8.             Range("Aj" & i) = 4 - Val(Range("T" & i)) & "Z or more"    ' 列"AJ"&i 值为"4 - Val(Range("T" & i)) & "Z or more"
  9.         Else
  10.             If a = 0 Then
  11.                 If b = 0 Then
  12.                     Range("AJ" & i) = c & "Z"
  13.                 ElseIf b > 0 Then
  14.                     Range("Aj" & i) = c & "Z"
  15.                     Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "over delivery"
  16.                 ElseIf b < 0 Then
  17.                     Range("Aj" & i) = c & "Z"
  18.                     Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "short delivery"
  19.                 End If
  20.             ElseIf a > 0 Then
  21.                 Range("AJ" & i) = 12 + c & "Z"
  22.             End If
  23.         End If
  24.     Next i
  25. End Sub
复制代码

VBA help.zip

46.84 KB, 下载次数: 6

 楼主| 发表于 2013-4-24 22:34 | 显示全部楼层
<FONT style="BACKGROUND-COLOR: yellow">ElseIf b = -Val(Range("T" & i)) Then '当"AE"&i列-"T"&i列 值为 负"T"&i 值时, 或"AE"&i 列值为0时

Range("Aj" & i) = 4 - Val(Range("T" & i)) & "Z or more" ' 列"AJ"&i 值为"4 - Val(Range("T" & i)) & "Z or more"

</FONT>End If


就是这段有问题, 一直没有找到原因
回复

使用道具 举报

发表于 2013-4-24 22:46 | 显示全部楼层    本楼为最佳答案   
BrianBrian 发表于 2013-4-24 22:34
ElseIf b = -Val(Range("T" & i)) Then '当"AE"&i列-"T"&i列 值为 负"T"&i 值时, 或"AE"&i 列值为0时

Ra ...

应该是 判断顺序的问题
  1. Sub 提货率()
  2.     Dim a As Integer, b As Integer, c As Integer, i As Integer, j As Long
  3.     For i = 2 To Range("A1048576").End(xlUp).Row
  4.         a = Val(Range("AC" & i)) - Val(Range("A" & i))
  5.         b = Val(Range("AE" & i)) - Val(Range("T" & i))
  6.         c = Val(Range("AD" & i)) - Val(Range("B" & i))
  7.         If b = -Val(Range("T" & i)) Or Val(Range("AE" & i)) = 0 Then   '当"AE"&i列-"T"&i列 值为 负"T"&i 值时, 或"AE"&i 列值为0时
  8.             Range("Aj" & i) = 4 - Val(Range("T" & i)) & "Z or more"    ' 列"AJ"&i 值为"4 - Val(Range("T" & i)) & "Z or more"
  9.         Else
  10.             If a = 0 Then
  11.                 If b = 0 Then
  12.                     Range("AJ" & i) = c & "Z"
  13.                 ElseIf b > 0 Then
  14.                     Range("Aj" & i) = c & "Z"
  15.                     Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "over delivery"
  16.                 ElseIf b < 0 Then
  17.                     Range("Aj" & i) = c & "Z"
  18.                     Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "short delivery"
  19.                 End If
  20.             ElseIf a > 0 Then
  21.                 Range("AJ" & i) = 12 + c & "Z"
  22.             End If
  23.         End If
  24.     Next i
  25. End Sub
复制代码
回复

使用道具 举报

发表于 2013-4-24 22:47 | 显示全部楼层
  1. Sub 提货率()
  2.     Dim a As Integer, b As Integer, c As Integer, i As Integer, j As Long
  3.     For i = 2 To Range("A1048576").End(xlUp).Row
  4.         a = Val(Range("AC" & i)) - Val(Range("A" & i))
  5.         b = Val(Range("AE" & i)) - Val(Range("T" & i))
  6.         c = Val(Range("AD" & i)) - Val(Range("B" & i))
  7.         Debug.Print "i=" & i, "a=" & a, "b=" & b, "[t" & i & "]=" & -Val(Range("T" & i))
  8.         If a = 0 Then
  9.             If b = 0 Then
  10.                 Range("AJ" & i) = c & "Z"
  11.             ElseIf b > 0 Then
  12.                 Range("Aj" & i) = c & "Z"
  13.                 Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "over delivery"
  14.             ElseIf b < 0 Then
  15.                 Range("Aj" & i) = c & "Z"
  16.                 Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "short delivery"
  17.             ElseIf b = -Val(Range("T" & i)) Then    '当"AE"&i列-"T"&i列 值为 负"T"&i 值时, 或"AE"&i 列值为0时
  18.                 Range("Aj" & i) = 4 - Val(Range("T" & i)) & "Z or more"    ' 列"AJ"&i 值为"4 - Val(Range("T" & i)) & "Z or more"
  19.             End If
  20.         ElseIf a > 0 Then
  21.             Range("AJ" & i) = 12 + c & "Z"
  22.         End If
  23.     Next i
  24. End Sub
复制代码
你看调试立即窗口,就会明白了。
回复

使用道具 举报

 楼主| 发表于 2013-4-25 21:50 | 显示全部楼层
谢谢两位老师的指点, 总于让我发现了自己的错误.

因为 a=0 条件下,不存在 b = -Val(Range("T" & i))  时,
而是在 a <0条件下, 可能出现b = -Val(Range("T" & i))  ;
(b 为整形, Val(Range("T" & i))非整型, 所以 b也不能直接等于Val(Range("T" & i));
新调整后ok, 谢谢两位老师!
  1. Sub pickuprate()
  2.     Dim a As Integer, b As Integer, c As Integer, i As Integer, j As Long
  3.     For i = 2 To Range("A1048576").End(xlUp).Row
  4.         a = Val(Range("AC" & i)) - Val(Range("A" & i))
  5.         b = Val(Range("AE" & i)) - Val(Range("T" & i))
  6.         c = Val(Range("AD" & i)) - Val(Range("B" & i))
  7.         Debug.Print "i=" & i, "a=" & a, "b=" & b, "[t" & i & "]=" & -Val(Range("T" & i))
  8.         If a = 0 Then
  9.             If b = 0 Then
  10.                 Range("AJ" & i) = c & "Z"
  11.             ElseIf b > 0 Then
  12.                 Range("Aj" & i) = c & "Z"
  13.                 Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "over delivery"
  14.             ElseIf b < 0 Then
  15.                 Range("Aj" & i) = c & "Z"
  16.                 Range("AL" & i) = Application.RoundDown(b, 0) & "/" & "short delivery"
  17.             End If
  18.         ElseIf a > 0 Then
  19.          Range("AJ" & i) = 12 + c & "Z"
  20. [color=Lime]        ElseIf a < 0 Then
  21.                 Range("Aj" & i) = 4 - Val(Range("T" & i)) & "Z or more"[/color]        End If
  22.     Next i
  23. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-4-25 21:54 | 显示全部楼层
那么的帅 发表于 2013-4-24 22:46
应该是 判断顺序的问题

谢谢"那么的帅"老师指点
回复

使用道具 举报

 楼主| 发表于 2013-4-25 21:55 | 显示全部楼层
hwc2ycy 发表于 2013-4-24 22:47
你看调试立即窗口,就会明白了。

谢谢班主任, 又帮我大忙了!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 00:44 , Processed in 0.646476 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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