Excel精英培训网

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

[已解决]这两种写法怎么效果不一样?

[复制链接]
发表于 2013-8-29 20:28 | 显示全部楼层 |阅读模式
本帖最后由 dadasda 于 2013-8-29 20:42 编辑

Sub Macro1()
    Dim arr, i&
   i = Range("X" & Rows.Count).End(3).Row
    arr = Range("W5:X" & i)
    For i = 1 To UBound(arr)
        If arr(i, 1) = 1 Then arr(i, 2) = arr(i, 2) & "(系列)": arr(i, 1) = ""
    Next
    Range("W5").Resize(UBound(arr), 2) = arr
End Sub
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub Macro1()
    Dim arr, i&
   i = Range("X" & Rows.Count).End(3).Row
    arr = Range("W5:X" & i)
    For i = 1 To UBound(arr)
        If arr(i, 1) = 1 Then arr(i, 2) = arr(i, 2) & "(系列)"
        arr(i, 1) = ""
    Next
    Range("W5").Resize(UBound(arr), 2) = arr
End Sub
这两种写法怎么效果不一样,第一种写法能达到需要的效果,第二种怎么执行代码后把数字1上面的数据清除

最佳答案
2013-8-29 20:32
本帖最后由 我心飞翔410 于 2013-8-29 20:37 编辑

If arr(i, 1) = 1 Then arr(i, 2) = arr(i, 2) & "(系列)"
这不是if块  第二个你改为
If arr(i, 1) = 1 Then
arr(i, 2) = arr(i, 2) & "(系列)"
        arr(i, 1) = ""
end if   
这才是if块 能达到一样的效果
如果if在一行就不需要写end if
发表于 2013-8-29 20:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 我心飞翔410 于 2013-8-29 20:37 编辑

If arr(i, 1) = 1 Then arr(i, 2) = arr(i, 2) & "(系列)"
这不是if块  第二个你改为
If arr(i, 1) = 1 Then
arr(i, 2) = arr(i, 2) & "(系列)"
        arr(i, 1) = ""
end if   
这才是if块 能达到一样的效果
如果if在一行就不需要写end if
回复

使用道具 举报

 楼主| 发表于 2013-8-29 20:39 | 显示全部楼层
本帖最后由 dadasda 于 2013-8-29 20:41 编辑
我心飞翔410 发表于 2013-8-29 20:32
If arr(i, 1) = 1 Then arr(i, 2) = arr(i, 2) & "(系列)"
这不是if块  第二个你改为
If arr(i, 1) = 1 T ...


我以为有分隔符就能另起一行,原来不是这样

点评

你看看 这个if的帮助 你就明白了  发表于 2013-8-29 20:43
回复

使用道具 举报

发表于 2013-8-29 20:41 | 显示全部楼层
本帖最后由 我心飞翔410 于 2013-8-29 20:42 编辑
dadasda 发表于 2013-8-29 20:39
我以为加了分隔符就能另起一行,原来不是这样

可以使用单行形式(第一种语法)来做短小简单的测试。但是,块形式(第二种语法)则提供了更强的结构化与适应性,并且通常也是比较容易阅读、维护及调试的。
注意 在单行形式中,按照 If...Then 判断的结果也可以执行多条语句。所有语句必须在同一行上并且以冒号分开,如下面语句所示:
If A > 10 Then A = A + 1 : B = B + A : C = C + B
在块形式中,If 语句必须是第一行语句。其中的 ElseElseIf,和 End If 部分可以只在之前加上行号行标签If 块必须以一个 End If 语句结束。
要决定某个语句是否为一个 If 块,可检查 Then 关键字之后是什么。如果在 Then 同一行之后,还有其它非注释的内容,则此语句就是单行形式的 If 语句。
ElseElseIf 子句都是可选的。在 If 块中,可以放置任意多个 ElseIf 子句,但是都必须在 Else 子句之前。If 块也可以是嵌套的。
当程序运行到一个 If 块(第二种语法)时,condition 将被测试。如果 conditionTrue,则在 Then 之后的语句会被执行。如果 condition False,则每个 ElseIf 部分的条件式(如果有的话)会依次计算并加以测试。如果找到某个为 True 的条件时,则其紧接在相关的 Then 之后的语句会被执行。如果没有一个 ElseIf 条件式为 True(或是根本就没有 ElseIf 子句),则程序会执行 Else 部分的语句。而在执行完 Then Else 之后的语句后,会从 End If 之后的语句继续执行。
提示 根据单一表达式来执行多种可能的动作时,Select Case 更为有用。不过,TypeOf objectname Is objecttype 子句不能在 Select Case 语句中使用。
注意 TypeOf 不能与诸如 Long、Integer 以及其他不是 Object 的固定数据类型一起使用
对 分开写就必须在一起构成了 if块
回复

使用道具 举报

发表于 2013-8-29 20:44 | 显示全部楼层
第一种
  If arr(i, 1) = 1 Then arr(i, 2) = arr(i, 2) & "(系列)": arr(i, 1) = ""

实际上完整的If结构应该是这个样子的:

If arr(i, 1) = 1 Then
  arr(i, 2) = arr(i, 2) & "(系列)"
  arr(i, 1) = ""
End If

其中  【arr(i, 2) = arr(i, 2) & "(系列)"】和【arr(i, 1) = ""】
会在If条件满足时相继执行,
也就是说,只有If条件满足,这两个语句才会被执行。


第二种:
If arr(i, 1) = 1 Then arr(i, 2) = arr(i, 2) & "(系列)"
arr(i, 1) = ""

实际的If 结构是这样子的:

If arr(i, 1) = 1 Then
   arr(i, 2) = arr(i, 2) & "(系列)"
End If
arr(i, 1) = ""

显然其中  【arr(i, 2) = arr(i, 2) & "(系列)"】和第一种情况一样,
仅当If条件满足时才会被执行,
而【 arr(i, 1) = ""】这一句已经在If ……Then……End If 的结构之外了,
变成了【无条件执行】。


这个就是差异所在。

点评

写的很清晰 呵呵学习了  发表于 2013-8-29 21:38

评分

参与人数 2 +13 收起 理由
dadasda + 1 赞一个!
我心飞翔410 + 12

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-8-29 20:49 | 显示全部楼层
香川群子 发表于 2013-8-29 20:44
第一种
  If arr(i, 1) = 1 Then arr(i, 2) = arr(i, 2) & "(系列)": arr(i, 1) = ""


回答的太好了,我已经明白,非常感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 23:38 , Processed in 0.482110 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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