下面是《做一个计划清单里面的代码》
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 ……等,本篇就不深入研究了。
閱讀更多 浮雲Excel分享 的文章