Excel VBA If……Then的循环你真的明白了嘛?

下面是《做一个计划清单里面的代码》

Sub 删除已经完成的任务()

Dim arr, n

arr = Sheet1.Range("a6:b105")

For n = 1 To UBound(arr)

If arr(n, 1) = "完成" Then arr(n, 2) = ""

Next n

Sheet1.Range("a6:b105") = arr

i = Sheet1.Range("b" & Rows.Count).End(xlUp).Row

For n = i To 6 Step -1

If Cells(n, 2) = "" Then

Rows(n).Delete

End

If

Next n

End Sub


上述代码有两处用到了If……Then:

1.If arr(n, 1) = "完成" Then arr(n, 2) = ""

2.If Cells(n, 2) = "" Then

Rows(n).Delete

End If

第二个If 的循环语句,修改成如下代码,从而达到同样的目的

If Len(Cells(n, 2)) Then Else Rows(n).Delete

总结一下,上面3个例子的差异。

1:第一个代码没有 end if;

2:第二个代码,分了三行;

3:第三个代码,没有比较运算符 即“=”号

那么为什么会有以上的差别呢?

通常If …… Then 语句的语法有两种:

1:横向一句表达时的语法:

If [条件] Then [真语句] Else [假语句]

中间可以使用任意【:】连接多层语句: If [条件] Then [真语句-1:真语句-2:真语句-3] Else [伪语句-1:伪语句-2:伪语句-3:伪语句-4]

2.多行表达:(标准的形式)

If [条件] Then

[真语句]

Else

[假语句]

End If

如果没有假语句,可以简写成

If [条件] Then

[真语句]

End If

两种表达式,唯一的区别就是横向写的时候,可以没有End if语句结尾。而标准的语句,必须要End if结尾,或者程序会报错。

那么为什么第三个If …… Then 没有比较运算符也可以呢?因为我们常规进行判断的时候,都是用、=等具有比较意义的值。

其实If …… Then的函数的本质,只是判定条件语句的返回结果是True或者Fales。除了比较运算符,还有很多函数可以返回Boolean的值。如:

IsNumeric(Num) 判断是否数字

IsDate(Date) 判断是否日期

IsError(temp) 判断是否错误值

IsArray(arr) 判断是否数组

IsEmpty(temp) 判断变量是否为空值

另外,微软工程师引入了直接把数值用作比较判断结果的隐形处理方法:

  • 如果表达式计算结果是数值 0 则视作满足 条件=False
  • 如果表达式计算结果不是数值 0 而是任意其它数值,则视作满足 条件=True

len函数就是取单元格的字符长度。当单元格有无字符的时候,数值会大于0,则为False ,运行Else后面的假语句。否者就运行,真语句。

当然If …… Then还有多重判断的语句,如If …… Then else IF ……等,本篇就不深入研究了。


分享到:


相關文章: