Excel精英培训网

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

[已解决]有点小白,代码太长了,请问如何简化表达式。

[复制链接]
发表于 2016-7-6 12:50 | 显示全部楼层 |阅读模式
本帖最后由 tfzyes 于 2016-7-6 12:52 编辑

  If Cells(1, 2) = 0 And Cells(1, 3) = 0 And Cells(1, 4) = 0 And Cells(1, 5) = 0 And Cells(1, 6) = 0 And Cells(1, 7) = 0 And Cells(1, 8) = 0 And Cells(1, 9) = 0 And Cells(1, 10) = 0 And Cells(1, 11) = 0 And Cells(1, 12) = 0 And Cells(1, 13) = 0 Then Range("B2") = 0: Exit Sub
If Cells(1, 2) <> 0 Or Cells(1, 3) <> 0 Or Cells(1, 4) <> 0 Or Cells(1, 5) <> 0 Or Cells(1, 6) <> 0 Or Cells(1, 7) <> 0 Or Cells(1, 8) <> 0 Or Cells(1, 9) <> 0 Or Cells(1, 10) <> 0 Or Cells(1, 11) <> 0 Or Cells(1, 12) <> 0 Or Cells(1, 13) <> 0 Then
其实就是说B1:N1全为0时如何表达,B1:N1只要一个不为0时如何表达
最佳答案
2016-7-6 14:28
  1. Sub text()
  2. Dim a As Range
  3. For Each a In [B1:N1]
  4. If a.Value = 0 Then
  5. k = k + 1
  6. End If
  7. Next
  8. If k = 0 Then
  9. MsgBox "都不为零蛋"
  10. ElseIf k = 13 Then
  11. MsgBox "都为零蛋"
  12. Else
  13. MsgBox "不都为零蛋"
  14. End If

  15. End Sub
复制代码
发表于 2016-7-6 12:56 | 显示全部楼层
回复

使用道具 举报

发表于 2016-7-6 13:10 | 显示全部楼层
逻辑关系很多了在一起判断效率是非常低的,
而且容易搞混淆。

判断区域全0或非0,用循环遍历一下就可以了,
逻辑关系也会很清楚。
比如:
  1. Sub test()
  2.     Dim rng As Range, boo As Boolean
  3.     For Each rng In [B1:N1]
  4.         If rng.Value = 0 Then
  5.             boo = True
  6.             Exit For
  7.         End If
  8.     Next
  9.     If boo Then
  10.         MsgBox "区域中有0"
  11.     Else
  12.         MsgBox "区域中无0"
  13.     End If
  14. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-7-6 13:36 | 显示全部楼层
本帖最后由 tfzyes 于 2016-7-6 13:37 编辑
雪舞子 发表于 2016-7-6 13:10
逻辑关系很多了在一起判断效率是非常低的,
而且容易搞混淆。

第二个条件只要其中一个单元格不为0如何表达?我不是需要"区域中无0"
回复

使用道具 举报

发表于 2016-7-6 13:52 | 显示全部楼层
tfzyes 发表于 2016-7-6 13:36
第二个条件只要其中一个单元格不为0如何表达?我不是需要"区域中无0"

区域中有0:B1:N1其中任一个单元格不为0,
区域中无0:B1:N1区域全为0。

回复

使用道具 举报

发表于 2016-7-6 14:11 | 显示全部楼层
本帖最后由 02761752696 于 2016-7-6 14:12 编辑

其实就是说B1:N1全为0时如何表达,B1:N1只要一个不为0时如何表达??
Sub XX()
If Application.sum([B1:N1]) = 0 Then
   MsgBox ("B1:N1 全为 0")
   Else
   MsgBox ("B1:N1 有一个或多个单元格不为0")
End If
End Sub

这个意思???
回复

使用道具 举报

发表于 2016-7-6 14:28 | 显示全部楼层    本楼为最佳答案   
  1. Sub text()
  2. Dim a As Range
  3. For Each a In [B1:N1]
  4. If a.Value = 0 Then
  5. k = k + 1
  6. End If
  7. Next
  8. If k = 0 Then
  9. MsgBox "都不为零蛋"
  10. ElseIf k = 13 Then
  11. MsgBox "都为零蛋"
  12. Else
  13. MsgBox "不都为零蛋"
  14. End If

  15. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
tfzyes + 1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-7-6 15:16 | 显示全部楼层
02761752696 发表于 2016-7-6 14:11
其实就是说B1:N1全为0时如何表达,B1:N1只要一个不为0时如何表达??
Sub XX()
If Application.sum() = 0 ...

对的,不是要消息框表达。If Cells(1, 2) <> 0 Or Cells(1, 3) <> 0 Or Cells(1, 4) <> 0 Or Cells(1, 5) <> 0 Or Cells(1, 6) <> 0 Or Cells(1, 7) <> 0 Or Cells(1, 8) <> 0 Or Cells(1, 9) <> 0 Or Cells(1, 10) <> 0 Or Cells(1, 11) <> 0 Or Cells(1, 12) <> 0 Or Cells(1, 13) <> 0 Then后面这个条件如何简化代码?
回复

使用道具 举报

 楼主| 发表于 2016-7-6 15:22 | 显示全部楼层
雪舞子 发表于 2016-7-6 13:52
区域中有0:B1:N1其中任一个单元格不为0,
区域中无0:B1:N1区域全为0。

我也头晕了,因为判定后我还要执行Then,Call 统计,我修改了下,没有反应。
回复

使用道具 举报

 楼主| 发表于 2016-7-6 15:26 | 显示全部楼层
02761752696 发表于 2016-7-6 14:11
其实就是说B1:N1全为0时如何表达,B1:N1只要一个不为0时如何表达??
Sub XX()
If Application.sum() = 0 ...

我修改你的代码else  Call 统计。没有反应呀。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 17:37 , Processed in 0.554509 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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